perm filename CKL.MAC[CH2,ALS]1 blob
sn#272112 filedate 1977-03-29 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE CKL CHECKERS LEARNING ROUTINES 12/8/70
C00006 00003 THE FOLLOWING DEFINITIONS ARE NEEDED TO DEFINE GLOBELS.
C00010 00004 LOADTA: PUSHJ PDP,DFILL
C00047 00005 MACRO USED INL25B
C00065 00006
C00072 00007 SUBTTL MACROS FOR SIGNATURE TABLES
C00075 00008 DSAVE: INIT 7,17
C00083 00009 BLOWUP==10 RELATIVE SIZE OF INPSIZ IN L AND P
C00098 00010 FIXX: TTYUUO 11,0
C00109 ENDMK
C⊗;
TITLE CKL CHECKERS LEARNING ROUTINES 12/8/70
;WITH FIX ROUTINE ADDED
;REVISED TO REDUCE MEMORY AND DISK SIZES
INTERN BEGINL,CMOVE,HEADFL,LBYT,LFLAG,NOSTO
INTERN LXF,LZERO,TRNKNO,DIVIDE,SYM,LC,INPSIZ
INTERN RFILL,DFILL,DSAVE,EVAL11,LOADTA
INTERN WHOWON,LCONTS,LCONTZ,ZL,BEGL3
INTERN BOOKA,BOOKP,BOOKK,BOOKM,BOOKI,INPSIZ,INPA,INPP,INPK,LABEL
EXTERN FINDFI,FINDX1,X4NORM,PCCNT,PHASE,PHASEV,X4ALL,X4TAB
EXTERN CRIP,REVERA,REVERP,REVERK,WHERE
EXTERN COLOR,CFLAG,BITTAB
EXTERN LEGAL,MAGIN,MAGTAP,TPUNIT,OUTIN,MGIBUF,MGOBUF
EXTERN NOYES,NUM3,NUMOUT,OCT2,OCTOUT,RJ2,RJ4,RJOUT,SCAN,TYI
EXTERN TERPRI,EOL,NEWLIN,PRINT,S,SI
EXTERN LOSE,LPTFIX,DWFLAG
EXTERN PLA,PLP,PLK,PLRF,PLLF,PLRB,PLLB,PUP,ZZ,PLY
EXTERN PRNAME,LPFLAG,BEGIN,COMEND
EXTERN TA,TP,TK,TYO,LASCAR,ERR,SIDE,OJ
EXTERN TLIST,EEB,EEB2,USEBOK
; REGISTER ASSIGNMENTS
;ASSIGNMENT USAGE
Z=0
X1=1 ; INDEX MAIN
U1=2
X2=3 ; INDEX PATH
U2=4
X3=5 ; INDEX PLAUS
U3=6
X4=7 ; INDEX TWIG
U4=10
X5=11 ; PASS COLOR
U5=12
Q=13
A=14 ; ACTIVE
P=15 ; PASSIVE
K=16 ; KINGS
PDP=17 ; PUSHJ
MA: BLOCK 300
MP: BLOCK 300
MK: BLOCK 300
ME: BLOCK 300
MWL: BLOCK 300 ;WHOWON INDICATORS
OPDEF TTYUUO [51B8]
BEST: Z ;BEST INDEX VALUE
X1S: Z
X2S: Z
SAVX2: Z
U2SS: Z
WHOWON: Z
WINLOS: Z ;COUNT OF DISTANCE TO WIN OR LOSS
BKMOVE: Z ;BOOK MOVE SAVE
X4CNT: Z
X4MOVE: Z
HIGH: BLOCK 4
LOW: BLOCK 4
EQUAL: BLOCK 4
THIGH: Z
TLOW: Z
TEQUAL: Z
HEADFL: -1
U4S: Z ;TEMPORARY STORAGE
KEAR: Z ;FLAG FOR KEAR LEARNING DATA
BOLFLG: Z ;FLAG FOR BOLAND LEARNING DATA
LXF: Z ;FLAG FOR LEGAL BOOK MOVE
TRNKNO: -1 ;TRUNK COUNTER
LBYT: Z ;BYTE POINTER
LFLAG: Z
CMOVE: Z
COUNT: Z
LPOINT: Z ;POINTER FOR VARIATIONS
STIME: SETZ U1,
CALL U1,[SIXBIT /RUNTIME/]
MOVEM U1,TIME
POPJ PDP,
LTIME: SETZ U1,
CALL U1,[SIXBIT /RUNTIME/]
SUB U1,TIME
ADDM U1,LABEL
LTIME0: ADDM U1,TIME
MOVEI U2,↑D1000
IDIVM U1,U2
MOVE U1,U2
PUSHJ PDP,RJOUT1
POPJ PDP,
RTIME: SETZ U1,
CALL U1,[SIXBIT /RUNTIME/]
SUB U1,TIME
JRST LTIME0
TIME: Z
HEADER: ASCIZ /
TIME PHASE3 PHASE2 PHASE1 PHASE0 # ALL
% %E % %E % %E % %E MOVES % %E
/
;THE FOLLOWING DEFINITIONS ARE NEEDED TO DEFINE GLOBELS.
;THIS SECTION TAKES THE PLACE OF PD.MAC
INTERN TRESET,TREE,TELPAR,SIG,SETW,SETPAR,SETB,FIND,MOVIN
INTERN ACCEPT,BDOUT,PLAYBS,PC,PB,TELLC,LTREE,GO,DEBUG
INTERN REVERS,PW,CTOTAL,LEGM,W,D,BOUT,MESS,IA,FINDM
INTERN CDIFF,DIFF,TOTAL,CRFST,FSTCR,LPTREE,RUNT,CRUNT,CTELLC,CSFLAG
INTERN MOVOUT,MOVES,IP,IK,TEST,SUM,RECIN
INTERN MOP,MOVX,EXIT1,DATA
EXTERN NOTICE
MOVOUT:
IP:
IK:
CDIFF:
TEST:
CRFST:
LPTREE:
CRUNT:
CTELLC:
TELPAR:
SIG:
SETW:
SETPAR:
SETB:
FIND:
MOVIN:
BDOUT:
PLAY:
PLAYBS:
PC:
PB:
GO:
DEBUG:
REVERS:
PW:
CTOTAL:
W:
D:
BOUT:
SUM:
RECIN:
EXIT1:
JRST NOTICE
IA:
FINDM:
DIFF:
TOTAL:
FSTCR:
RUNT:
CSFLAG:
TRESET:
TREE:
MOP:
TELLC:
MOVX:
LTREE: Z
MESS: ASCIZ /
/
;FIRST LEVEL TABLE EVALUATION MACROS AND DATA
DEFINE MACZ (SC) <;TABLE EVALUATION SCORE
MOVE Z,SIGZ1'SC(A)
CAMN K,A
JRST .+7 ;DO NOT SCORE BOOK MOVE
CAMGE Z,SIGZ1'SC(K)
AOS HIGH1'SC(P)
CAMN Z,SIGZ1'SC(K)
AOS EQU1'SC(P)
CAMLE Z,SIGZ1'SC(K)
AOS LOW1'SC(P)>
TAB1E: MACZ 1
MACZ 2
MACZ 3
MACZ 4
MACZ 5
MACZ 6
POPJ PDP,
SIGZ11: BLOCK 20
SIGZ12: BLOCK 20
SIGZ13: BLOCK 20
SIGZ14: BLOCK 20
SIGZ15: BLOCK 20
SIGZ16: BLOCK 20
HIGH11: BLOCK 4
HIGH12: BLOCK 4
HIGH13: BLOCK 4
HIGH14: BLOCK 4
HIGH15: BLOCK 4
HIGH16: BLOCK 4
EQU11: BLOCK 4
EQU12: BLOCK 4
EQU13: BLOCK 4
EQU14: BLOCK 4
EQU15: BLOCK 4
EQU16: BLOCK 4
LOW11: BLOCK 4
LOW12: BLOCK 4
LOW13: BLOCK 4
LOW14: BLOCK 4
LOW15: BLOCK 4
LOW16: BLOCK 4
DEFINE MACP (SC) <;PRINT MACRO
MOVE X2,HIGH1'SC(P)
ADD X2,LOW1'SC(P)
ADD X2,EQU1'SC(P)
MOVEM X2,X2S
MOVE X3,LOW1'SC(P)
IMULI X3,↑D100
IDIV X3,X2
MOVE U1,X3
PUSHJ PDP,RJOUT3
MOVE X3,HIGH1'SC(P)
IMULI X3,↑D100
MOVE X2,X2S
IDIV X3,X2
MOVE U1,X3
SETZM HIGH1'SC(P)
SETZM EQU1'SC(P)
SETZM LOW1'SC(P)
PUSHJ PDP,RJOUT1>
TAB1P: PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /TABLE L11H L12H L13H L14H L15H L16H
/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
MOVEI P,3
TAB1P1: MOVEI U1,[ASCIZ /PHASE/]
PUSHJ PDP,PRINT
MOVE U1,P
PUSHJ PDP,NUMOUT
MACP 1
MACP 2
MACP 3
MACP 4
MACP 5
MACP 6
PUSHJ PDP,TERPRI
SOJGE P,TAB1P1
PUSHJ PDP,TERPRI
POPJ PDP,
LOADTA: PUSHJ PDP,DFILL
BEGINL: PUSHJ PDP,TERPRI
SETOM TRNKNO
SETOM HEADFL
MOVEI U1,1
MOVEM U1,SI
SETOM LCONTF#
MOVEI U1,[ASCIZ /DEPTH (0 1 2 OR 3)?:/]
PUSHJ PDP,PRINT
PUSHJ PDP,SCAN
PUSHJ PDP,EOL
JRST .-4
CAIG U1,3
SKIPGE U1
JRST .-7
MOVEM U1,LDEPTH
ADDI U1,3 ;ALLOW 3 MORE
MOVEM U1,KDEPTH
SETZM LFLAG6
MOVEI U1,[ASCIZ /WANT LINEAR DATA? :/]
PUSHJ PDP,PRINT
SETZM LFLAG1
PUSHJ PDP,NOYES
JRST SSD
SETOM LFLAG1
MOVEI U1,[ASCIZ / REPORT TERMS? :/]
PUSHJ PDP,PRINT
SETOM LFLAG5
PUSHJ PDP,NOYES
SETZM LFLAG5
SSD: MOVEI U1,[ASCIZ /CHANGE WEIGHTS?:/]
PUSHJ PDP,PRINT
PUSHJ PDP,NOYES
JRST BEGL2
MOVEI U1,[ASCIZ /LINEARIZE FIRST LEVEL ? :/]
PUSHJ PDP,PRINT
SETZM LFLAG2
PUSHJ PDP,NOYES
JRST SSD1
SETOM LFLAG2
MOVEI U1,[ASCIZ /CR OR TYPE WEIGHT :/]
PUSHJ PDP,PRINT
PUSHJ PDP,SCAN
PUSHJ PDP,EOL
JRST .+5
MOVEM U1,WEIGHT
MOVNS U1
HRRM U1,L9A
JRST .+6
MOVEI U1,[ASCIZ / WEIGHT IS /]
PUSHJ PDP,PRINT
MOVE U1,WEIGHT
PUSHJ PDP,RJOUT1
PUSHJ PDP,TERPRI
SSD1: MOVEI U1,[ASCIZ /SYM SMOOTH FIRST LEVEL :/]
PUSHJ PDP,PRINT
SETZM LFLAG7
PUSHJ PDP,NOYES
JRST SSD2
SETOM LFLAG7
MOVEI U1,[ASCIZ /TYPE FIRST SHIFT :/]
PUSHJ PDP,PRINT
PUSHJ PDP,SCAN
PUSHJ PDP,EOL
JRST .+5
MOVEM U1,WEIGH1
MOVNS U1
HRRM U1,L10B
JRST .+6
MOVEI U1,[ASCIZ /SYM WEIGHT IS /]
PUSHJ PDP,PRINT
MOVE U1,WEIGH1
PUSHJ PDP,RJOUT1
PUSHJ PDP,TERPRI
SSD2: MOVEI U1,[ASCIZ /SYM SMOOTH SECOND LEVEL :/]
PUSHJ PDP,PRINT
SETZM LFLAG8
PUSHJ PDP,NOYES
JRST SSD3
SETOM LFLAG8
MOVEI U1,[ASCIZ /TYPE SECOND SHIFT :/]
PUSHJ PDP,PRINT
PUSHJ PDP,SCAN
PUSHJ PDP,EOL
JRST .+5
MOVEM U1,WEIGH2
MOVNS U1
HRRM U1,AC3
JRST .+6
MOVEI U1,[ASCIZ /SYM WEIGHT IS /]
PUSHJ PDP,PRINT
MOVE U1,WEIGH2
PUSHJ PDP,RJOUT1
PUSHJ PDP,TERPRI
SSD3: MOVEI U1,[ASCIZ /SYM SMOOTH THIRD LEVEL :/]
PUSHJ PDP,PRINT
SETZM LFLAG9
PUSHJ PDP,NOYES
JRST BEGL2
SETOM LFLAG9
MOVEI U1,[ASCIZ /TYPE THIRD SHIFT :/]
PUSHJ PDP,PRINT
PUSHJ PDP,SCAN
PUSHJ PDP,EOL
JRST .+5
MOVEM U1,WEIGH3
MOVNS U1
HRRM U1,L34B
JRST BEGL2
MOVEI U1,[ASCIZ /SYM WEIGHT IS /]
PUSHJ PDP,PRINT
MOVE U1,WEIGH3
PUSHJ PDP,RJOUT1
PUSHJ PDP,TERPRI
BEGL2: SETZM PRNVAR
SETZM DSKTAP
SETZM MGIBUF
BEGL4: MOVEI U1,[ASCIZ /TYPE B, K, OR L :/]
PUSHJ PDP,PRINT
PUSHJ PDP,TYI
CAIE U1,12
CAIN U1,15
JRST .-3
CAIN U1,"B"
JRST BEGLB
SETZM BOLFLG ;NOT BOLAND
CAIN U1,"K"
JRST BEGLK
CAIN U1,"L"
JRST BEGLL
JRST BEGL3
BEGLB: MOVE U1,[SIXBIT /BOLAND/]
MOVEM U1,DATAG
SETOM BOLFLG ;SET FLAG
MOVEI U1,[ASCIZ /BOLAND WILL BE USED/]
JRST .+10
BEGLK: MOVE U1,[SIXBIT /KEARS/]
MOVEM U1,DATAG
MOVEI U1,[ASCIZ /KEARS WILL BE USED/]
JRST .+4
BEGLL: MOVE U1,[SIXBIT /LEES/]
MOVEM U1,DATAG
MOVEI U1,[ASCIZ /LEES WILL BE USED/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,TYI
CAIE U1,15
JRST .-2
BEGL3: PUSHJ PDP,DSKINI
JRST BEGL4
GETGO: MOVEI Z,777777
MOVEM Z,CFLAG
SETZM TRUNKF
MOVEI U1,[ASCIZ / TRUNK NAMES? : /]
PUSHJ PDP,PRINT
PUSHJ PDP,NOYES
JRST .+2
SETOM TRUNKF
SETZM HIGH
SETZM LOW
SETZM EQUAL
SETZM THIGH
SETZM TLOW
SETZM TEQUAL
SETZM HEADFL
SOS HEADFL
SETZM COUNT ;INITIALIZE FOR LEARNING
PUSHJ PDP,STIME
;ASK TELETYPE WHERE TO START--IF NOT AT FRONT, THEN
;RESET TRNKNO. SKIP OVER TRNKNO NUMBER OF TRUNKS NOW.
MOVEI U1,[ASCIZ / TRUNK NUMBER? : /]
PUSHJ PDP,PRINT
MOVEI U1,1
PUSHJ PDP,SCAN ;GOBBLE UP CR
PUSHJ PDP,EOL ;SCAN CHAR.
JRST BEGIN3 ;CR
SOS U2,U1 ;NUMBER
MOVEM U1,TRNKNO ;STARTING TRUNK NO.
SETZM KEAR ;TURN OFF KEAR LEARNING FLAG
LB1: PUSHJ PDP,NEWLIN ;FIRST CHAR. OF CARD IMAGE IN U1
SKIP ;EOF
CAIN U1,"<" ;LEES OR TESCHELEIT LEARNING DATA?
SETZM KEAR ;YES, SO SET FLAG TO 0
CAIN U1,"!" ;KEAR LEARNING DATA?
AOS KEAR ;YES, SO SET FLAG
CAIN U1,"&"
JRST .+3
CAIE U1,"#" ;A "#"?
JRST LB1 ;NO
SOJGE U2,LB1 ;YES, BUT IS IT PROPER TRUNK CARD?
PUSHJ PDP,COMM1
SETZM X2 ;YES
SETOM LRNJMP ;TO SKIP DATA UPDATE FIRST TIME
JRST LTR
COMM2: SOJG U2,COMM+1
MOVEI X1,15
PUSHJ PDP,TYO
JRST COMM3
COMM: MOVEI U2,26
PUSHJ PDP,MAGIN ;GET NEXT CHAR.
JRST ENDERR ;EOF NOT EXPECTED HERE
MOVE X1,U1
PUSHJ PDP,TYO ;PRINT THE CHAR.
CAIE U1,15 ;<CR>?
JRST COMM2 ;NO
COMM3: MOVEI X1,12 ;YES, SO ...
PUSHJ PDP,TYO ;PRINT LINE-FEED
AOSE HEADFL
POPJ PDP,
COMM1: PUSHJ PDP,TERPRI
MOVEI U1,HEADER
PUSHJ PDP,PRINT
POPJ PDP, ;AND RETURN
LFSTRT: PUSHJ PDP,MAGIN ;GET NEXT CHAR.
JRST BEGIN ;EOF FOUND
JRST BEGIN2+2 ;U1 HAS FIRST CHAR. FOLLOWING LINE FEED
BEGIN3: PUSHJ PDP,TERPRI
TTYUUO 11,0 ;CLEAR TTY BUFFER
SETOM LRNJMP ;TO SKIP DATA UPDATE FIRST TIME
BEGIN2:
BEGIN4: PUSHJ PDP,NEWLIN ;FIRST CHAR. OF NEW CARD IN U1
JRST BEGIN ;EOF
CAIN U1,"!" ;"!" IS FIRST CHAR. OF KEAR DATA
AOSA KEAR ;KEAR NOT = 0 IFF KEAR DATA BEING PROCESSED
SKIPA
JRST .+10
CAIN U1,"#" ;A TRUNK CARD?
JRST LTR ;YES
CAIN U1,"&" ;TEST FOR BOLAND HEADER
JRST LTR
CAIE U1,"<" ;COMMENT CARD?
JRST .+4 ;NO
SETZM KEAR ;TURN OFF KEAR LEARNING FLAG
PUSHJ PDP,COMM ;YES, SO PRINT COMMENT
JRST BEGIN4 ;AND GET NEXT CARD
CAIN U1,">" ;END OF DATA?
JRST LSTOP ;YES
CAIE U1,14 ;FORM FEED?
JRST .+4 ;NO
PUSHJ PDP,MAGIN ;YES, SO GET NEXT CHARACTER & TRY AGAIN
HALT ;EOF FOUND
JRST BEGIN4+2
CAIE U1," " ;COLUMN 1 A BLANK?
JRST LMOVE+2 ;NO, SO MUST BE A MOVE CARD
JRST LBRNCH ;MUST BE VARIATION CARD
LTR: SETZM WHOWON ;TREAT GAME AS A DRAW TILL WE KNOW BETTER
MOVEI U1,"TK"
SKIPN KEAR
SETZ U1,
MOVEM U1,LPOINT ;A TRUNK CARD HAS BEEN FOUND
LTR1: AOS U1,TRNKNO ;ADD 1 TO TRUNK CARD COUNTER
JUMPE U1,LCONT ;1ST TIME THRU. NO DATA TO REPORT YET
SKIPE BOLFLG
TRNN U1,7
JRST .+2
JRST TTYUU
PUSHJ PDP,NUM3
MOVEI U1,[ASCIZ /. /]
PUSHJ PDP,PRINT
MOVEI P,3
PUSHJ PDP,LTIME ;TIME FOR THIS TRUNK
SETZM LTRSAV#
LTR2: MOVE A,PHASES(P)
MOVE Z,LOW(P)
ADDM Z,LABEL+2(A)
ADDM Z,TLOW
MOVE U2,LOW(P)
MOVE Z,EQUAL(P)
ADDM Z,LABEL+3(A)
ADDM Z,TEQUAL
ADD U2,EQUAL(P)
MOVE Z,HIGH(P)
ADDM Z,LABEL+4(A)
ADDM Z,THIGH
ADD U2,HIGH(P)
ADDM U2,LTRSAV
MOVE U1,EQUAL(P)
ASH U1,-1
ADD U1,LOW(P)
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT3 ;%L
SETZM LOW(P)
SETZM HIGH(P)
MOVE U1,EQUAL(P)
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT1 ;%E
SETZM EQUAL(P)
SOJGE P,LTR2
MOVE U1,LTRSAV
ADDM U1,LABELD+1
PUSHJ PDP,RJOUT3
MOVE U2,THIGH
ADD U2,TEQUAL
ADD U2,TLOW
MOVE U1,TEQUAL
ASH U1,-1
ADD U1,TLOW
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT3 ;%TL
MOVE U1,TEQUAL
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT1 ;%TE
PUSHJ PDP,TERPRI
SKIPE RFLAG
PUSHJ PDP,TAB1P ;ON PAGE 2
UPTAB: SETZM THIGH
SETZM TLOW
SETZM TEQUAL
PUSHJ PDP,LINEAR
UPTAB2: MOVE U1,TRNKNO
TRNE U1,3
JRST TTYUU
TRNN U1,777
JRST .+3
PUSHJ PDP,DIVIDT
PUSHJ PDP,DSAVE
JRST TTYUU
TTYUU: TTYUUO 2,U2
JRST LCONT
PUSH PDP,[EXP TTYUU]
CAIE U2,"R"
JRST .+3
SOS RFLAG#
POPJ PDP,
CAIE U2,"F"
JRST .+3
SETOM LFLAGT#
POPJ PDP,
CAIN U2,"T"
JRST TOTALS
;EXTRA COMMANDS GO IN HERE
POP PDP,
JRST COMEND+5
LCONTS: SKIPE LCONTF
JRST LCONT
LCONTZ: SETZM MGIBUF
SETOM LCONTF
SETOM TRNKNO
MOVEI U1,1
MOVEM U1,SI
PUSHJ PDP,DSKINI
JRST BEGIN3 ;EXTRA INSTRUCTION NEEDED
JRST BEGIN3
LLSTOP: AOS U1,TRNKNO
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / IS THE NEXT TRUNK TO READ/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /TYPE SAVE TO SAVE/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST BEGIN
LSTOP: PUSHJ PDP,MAGIN ;GET NEXT CHAR. TO PRINT
JRST .+4 ;NO MORE CHARACTERS, SO UPDATE EVAL TABLES
MOVE X1,U1 ;PUT CHAR. IN X1 FOR TYO
PUSHJ PDP,TYO ;PRINT CHAR.
JRST LSTOP ;DO IT AGAIN
SETZM COUNT
JRST UPTAB
LCONT: SKIPE BOLFLG
JRST BOLAND
SKIPE TRUNKF
PUSHJ PDP,COMM
MOVSI A,377360 ;LEARN SOME MORE FROM STARTING BOARD
MOVEM A,TA ;GET INITIAL BOARD FOR THIS TRUNK
MOVEI P,17377
MOVEM P,TP
SETZB X2,TK
SETZM COLOR
SETOM X4VAR ;TO COUNT VARIATION BOARDS
JRST BEGIN2 ;GO GET MOVES NOW
LMOVE: PUSHJ PDP,MAGIN ;INPUT CHARACTERS FOR BKOK MOVE
JRST ENDERR ;EOF FOUND, NOT EXPECTED HERE
CAIN U1,12 ;A LINE FEED?
JRST LFSTRT ;YES
CAIE U1,15 ;IS IT A CR
CAIN U1," " ;A SPACE?
JRST LMOVE ;YES, SO TRY AGAIN
SKIPE LRNJMP ;TEST IF JUMP
JRST LMOVE1 ;LAST MOVE WAS A JUMP
UPDTSC: SKIPGE A,BEST
JRST LMOVE1 ;DO NOT SCORE THIS MOVE
MOVE K,SI ;MOVE INDEX
MOVE P,PHASE ;PHASE IN P
MOVE X3,S(A) ;EVAL SCORE FOR BOOK MOVE
CAMN K,A
SOJLE K,LMOVE1
CAMGE X3,S(K) ;IS IT THE BEST SCORE?
AOS HIGH(P) ;H COUNT (ADD 1 FOR EVERY SCORE > BEST)
CAMN X3,S(K)
AOS EQUAL(P) ;E COUNT
CAMLE X3,S(K)
AOS LOW(P) ;L COUNT (ADD 1 FOR EVERY SCORE < OR = BEST)
PUSHJ PDP,TAB1E ;ON PAGE 2
SOJG K,UPDTSC+3
LMOVE1: SETZM NNNONO#
CAIN U1,"%" ;A BAD MOVE
JRST NONONO
CAIN U1,"=" ;ONLY FAIR MOVE
JRST NOGOOD
CAIN U1,"'" ;BEST MOVE
JRST BSTMOV
LMOVE2: SETZM SI
MOVE A,TA ;GET LAST BOARD
MOVE P,TP
MOVE K,TK
MOVEM A,PLA ;STORE BOARD FOR FUTURE PUPPING
MOVEM P,PLP
MOVEM K,PLK
SETZB X3,LXF ;ZERO INDEX & LEGAL BOOK MOVE FLAG
AOS X2 ;INCREMENT MOVE POINTER
CAIN U1,"X" ;IS IT AN "X"
JRST XCODE ;YES
CAIN U1,"*" ;A STAR?
JRST LA1 ;YES
CAIL U1,60 ;IS IT A NUMBER?
CAILE U1,71 ;IT IS IF 57 < U1 < 72.
SOJA X2,BEGIN2 ;NOT A NUMBER, PROBABLY A <CR>
PUSHJ PDP,NOSTO+2 ;A NUMBER, SO DON'T SAVE BOARD
JRST LA4
NOGOOD: SETOM NNNONO
JRST .+3
BSTMOV: MOVEI Z,1 ;FOR DOUBLE CREDIT LATER
MOVEM Z,NNNONO
PUSHJ PDP,MAGIN
HALT
JRST LMOVE2
NONONO: MOVE U1,COLOR
ADDI U1,1
MOVEM U1,WHOWON ;1 WHITE WINS, 2 BLACK WINS
JRST .-6
KEAR.: PUSHJ PDP,NOSTO ;GET NEXT MOVE
MOVE U3,LPOINT
ANDI U3,37777
LSH U3,16 ;GET IN POSITION
KEAR.0: PUSHJ PDP,MAGIN
HALT
MOVE U2,U1
PUSHJ PDP,MAGIN
HALT
CAIN U1,15 ;NOT A CR
JRST KEAR.2
CAIE U1," "
CAIN U1,"+"
JRST KEAR.2 ;SINGLE CHARACTER CASE
LSH U2,7
IOR U2,U1
PUSHJ PDP,MAGIN
HALT
JRST KEAR.3
KEAR.2: CAIL U2,60 ;TEST FOR LETTER OR NUMBER
CAILE U2,71
JRST .+3
ADDI U2,14000 ;ADD LEADING 0
JRST .+3
LSH U2,7
ADDI U2,60 ;ADD TRAILING 0
KEAR.3: IOR U2,U3
PUSHJ PDP,BDSTOR
CAIE U1," " ;NOT A SPACE
CAIN U1,15 ;NOT A CR
JRST LA4 ;WE ARE THROUGH
CAIN U1,"+"
JRST KEAR.0 ;SAVE AGAIN
JRST LA4
LA1: SKIPE KEAR ;WHICH DATA IS BEING PROCESSED?
JRST KEAR. ;KEAR DATA.
MOVE U2,LPOINT ;GET PRESENT BRANCH
LSH U2,6
ADD U2,X2 ;ADD INDEX WITHIN THIS BRANCH
BDSTOR: AOS X4,X4VAR ;INDEX TO NEXT SPACE
MOVEM U2,ME(X4) ;STORE THE BOARD
MOVEM A,MA(X4)
MOVEM P,MP(X4)
SKIPE COLOR ;RIGHTMOST GUARD BIT IS COLOR
TRO K,400
MOVEM K,MK(X4)
TRZ K,400 ;ZERO BIT (IT MIGHT NEED IT)
MOVE Z,WHOWON
HRL Z,WINLOS ;SAVE DISDANCE TO WIN OR LOSS
MOVEM Z,MWL(X4) ;SAVE WHOWON FLAG
SKIPE KEAR
POPJ PDP, ;KEAR WANTS RETURN
AOSE DWFLAG ;IT'S -1 ONLY WHEN COMING FROM XCODE
PUSHJ PDP,NOSTO ;GET BOOK MOVE
LA4: PUSHJ PDP,PHASEV ;COMPUTE INITIAL PHASE
MOVE U1,PHASES(U5)
MOVEM U1,PHASAD ;FOR USE IN EVA
SETZB X3,LRNJMP# ;ASSUME NORMAL MOVE
SETZM STOP ;WIPE SLATE CLEAN
PUSHJ PDP,LEGAL ;NOW GET ALL TRUNKS
JRST NOMOV ;NO LEGAL MOVES
JRST .+2 ;DEPEND ON X4NORM FOR SINGLE MOVE DETECT
AOS STOP ;BIT 35 USED FOR X3=0 CASE
PUSHJ PDP,X4NORM
MOVE Z,X4ALL
TRNN Z,16
JRST LA4JJ ;MAY BE FORKED
LA4A: SKIPN U1,WHOWON
JRST LA4B ;OK TO GO ON
SUBI U1,1
CAMN U1,COLOR
JRST LA4J ;DO NOT LEARN
LA4B: SKIPGE NNNONO
JRST LA4J ;DO NOT LEARN
MOVEI X1,1
MOVE Z,EEB
MOVEM Z,EB
MOVEM Z,EBA
MOVE Z,EEB2
MOVEM Z,EB2
MOVEM Z,EBA2
SETZM TA ;FILLED AFTER BOOK MOVE
SETZM X4CNT
SETZM X4MOVE
AOJA X3,ALS2
LA4JJ: SETOM LRNJMP
ADDI X3,1
MOVE Z,PLRF-1(X3)
MOVEM Z,LA4RF# ;SAVE IF NEEDED
MOVE Z,PLLF-1(X3)
MOVEM Z,LA4LF#
MOVE Z,PLLB-1(X3)
MOVEM Z,LA4LB#
MOVE Z,PLRB-1(X3)
MOVEM Z,LA4RB#
PUSHJ PDP,PUP
JRST NOMOV ;ERROR SHOULD NEVER HAPPEN
CAME P,TP
JRST .+3
MOVEM A,TA
MOVEM K,TK
PUSHJ PDP,PUP
JRST LDEF ;0NLY ONE MOVE
MOVE Z,LA4RF
MOVEM Z,PLRF-1(X3)
MOVE Z,LA4LF
MOVEM Z,PLLF-1(X3)
MOVE Z,LA4LB
MOVEM Z,PLLB-1(X3)
MOVE Z,LA4RB
MOVEM Z,PLRB-1(X3)
SETZM LRNJMP
SOJA X3,LA4A
LA4J: SETOM LRNJMP
SETZM TA
ADDI X3,1
PUSHJ PDP,PUP
JRST LDEF
CAME P,TP
JRST .-3
MOVEM A,TA
MOVEM K,TK
JRST LDEF
DSKINI: INIT 4,0
SIXBIT /DSK/
XWD MGOBUF,MGIBUF
JRST DSKER
SETZM DATAG+2
MOVE U1,[SIXBIT / 2KDH/]
MOVEM U1,DATAG+3
LOOKUP 4,DATAG
JRST DSKER
INBUF 4,11
AOS (PDP)
POPJ PDP,
DSKER: MOVEI U1,[ASCIZ /NO GAMES ON DSK/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
RELEAS 4,
POPJ PDP,
DATAG: SIXBIT /LEES/
SIXBIT //
Z
Z
Z ;GUARD
EB: BLOCK 20
Z
EB2: BLOCK 20
EBA: Z
EBA2: Z
ALS1: MOVE Z,EB+2
MOVEM Z,EEB
MOVE Z,EB+1
MOVEM Z,EEB+1
MOVE Z,EB2+2
MOVEM Z,EEB2
MOVE Z,EB2+1
MOVEM Z,EEB2+1
ALS1B: MOVEI X1,1 ;FOR NON-BOOK MOVES
SKIPE LXF
HRLZ X1,X4ALL ;TO LEFT HALF FOR BOOK MOVES
SKIPLE NNNONO
LSH X1,1 ;MULTIPLY BY TWO FOR WIN
PUSHJ PDP,LEV1 ;EVALUATE AND LEARN ON BACKED UP VALUES
ADDM X1,SIGLF(U5) ;UPDATE FINAL TABLE
AOS U2,SI
MOVEM Z,S(U2)
SKIPE LXF
MOVEM U2,BEST
ALS1A: MOVE Z,EBA
MOVEM Z,EB ;OLD VALUE MAY HAVE BEEN BLASTED
MOVEM Z,EEB
MOVE Z,EBA2
MOVEM Z,EB2
MOVEM Z,EEB2
MOVE Z,EEB-1
MOVEM Z,EEB+1
MOVE Z,EEB2-1
MOVEM Z,EEB2+1
ALS2: MOVEI X3,1 ;SAFETY MEASURE
MOVE Z,LOSE ;RESET FOR EACH NEW BRANCH
MOVEM Z,ZZ-1
MOVEM Z,ZZ
SETZM LXF
PUSHJ PDP,PUP
JRST LDEF ;LAST BRANCH PROCESSED
SETZM EVFLAG#
AOS X4CNT ;COUNT OF MOVES
CAME P,TP ;IS THIS THE BOOK MOVE
JRST ALS3 ;NO
MOVEM A,TA ;SAVE UPDATED BOARD
MOVEM K,TK
SETOM LXF ;SET FLAG
MOVE U1,X4CNT ;GET MOVE COUNT
SKIPE COLOR
MOVE U1,X4TAB(U1)
HRL U1,WINLOS
MOVEM U1,X4MOVE
SOSGE WINLOS
SETZM WINLOS ;NEG VALUE MEANS TROUBLE
ALS3: MOVEM A,PLA(X3) ;PREPARE FOR EXTENSION
MOVEM P,PLP(X3)
MOVEM K,PLK(X3)
MOVE Z,STOP
AND Z,STOMP(X3) ;SAVE EARLIER X3 VALUES ONLY
MOVEM Z,STOP
PUSHJ PDP,LEGAL
JRST ALS8
JRST ALS3J
MOVE Z,STOP
IOR Z,STBIT(X3) ;RECORD THIS NON-JUMP MOVE
MOVEM Z,STOP
CAMGE X3,LDEPTH
AOJA X3,ALS5 ;GO DEEPER
AND Z,STTEST(X3) ;IS OTHER SIDE EVALUATED
JUMPN Z,ALS3A ;YES SO DO FULL EVA
CAMGE X3,KDEPTH ;MUST WE STOP ANYWAY
AOJA X3,ALS5 ;NO
JRST ALS3A ;DO THE BEST WE CAN
ALS3J: CAIGE X3,17 ;SPACE LIMIT
AOJA X3,ALS4
SKIPN LXF ;IS THIS THE BOOK MOVE
JRST ALS1A ;NO SO IGNORE THIS PART
SETOM BEST ;IGNORE SIGNAL
JRST LDEF
ALS3A: CAIG X3,1
JRST ALS1B ;LEVI IN ALS1B ADEQUATE
SETZM LFLAG ;DO NOT UPDATE TABLES NOW
PUSHJ PDP,EVA ;BUT DO EVA
ALS3B: SETOM LFLAG ;RESET LEARN FLAG
MOVNS Z
CAMG Z,ZZ-1(X3)
JRST ALS6
MOVEM Z,ZZ-1(X3) ;BACK SCORE
MOVE Z,EEB(X3)
MOVEM Z,EB(X3) ;ALSO BACK EV DATA
MOVE Z,EEB2(X3)
MOVEM Z,EB2(X3)
MOVE Z,EEB-1(X3)
MOVEM Z,EB-1(X3)
MOVE Z,EEB2-1(X3)
MOVEM Z,EB2-1(X3)
JRST ALS6 ;GET NEXT BOARD AT THIS LEVEL
ALS4: MOVE Z,EEB-3(X3) ;ADVANCE SINCE NOT COMPUTED FOR JUMP
MOVEM Z,EEB-1(X3)
MOVE Z,EEB2-3(X3)
MOVEM Z,EEB2-1(X3)
ALS5: MOVE Z,ZZ-3(X3)
MOVEM Z,ZZ-1(X3)
ALS6: PUSHJ PDP,PUP ;GET NEXT BOARD
JRST ALS7
JRST ALS3
ALS7: CAIG X3,2 ;BACKING FROM WHERE
SOJA X3,ALS1 ;TIME TO UPDATE TABLES
MOVN Z,ZZ-1(X3) ;NORMAL BACK UP
CAMG Z,ZZ-2(X3)
SOJA X3,ALS6 ;GET NEXT BOARD
MOVEM Z,ZZ-2(X3)
MOVE Z,EB(X3)
MOVEM Z,EB-2(X3)
MOVE Z,EB2(X3)
MOVEM Z,EB2-2(X3)
SOJA X3,ALS6
ALS8: MOVE Z,LOSE
JRST ALS3B
LDEF: MOVE Z,EBA ;NEXT MOVE PROTECTION
MOVEM Z,EEB-1
MOVE Z,EBA2
MOVEM Z,EEB2-1
MOVEI X3,1
XORM X3,COLOR ;CHANGE COLOR
PUSHJ PDP,MAGIN ;GET NEXT CHAR.
JRST ENDERR ;EOF NOT EXPECETED HERE
CAIN U1,"/" ;A "/"?
SOJA X2,.-3 ;YES, SO DON'T COUNT THIS LAST MOVE
SKIPN TA ;TA NOT = 0 IF BOOK MOVE WAS FOUND
JRST FORGIV-1 ;TA NOT ZERO IF BOOK MOVE FOUND
SKIPN LRNJMP ;SINGLE JUMPS NOT STORED
SKIPN USEBOK ;ARE WE SAVING ROTE
JRST LMOVE+2 ;NO
MOVEM U1,U1S#
SKIPN WINLOS
JRST LDEFA ;NO WINLOS GIVEN
MOVE U1,WHOWON
JUMPE U1,LDEFA ;NO WHOWON DATA
ADD U1,COLOR ;NOTE COLOR ALREADY UPDATED
ADD U1,WINLOS ;ALSO ALREADY CHANGED
TRNN U1,1
AOS U1,WINLOS ;CORECT VALUE TO AGREE
HRLM U1,X4MOVE ;FIX X4MOVE
TRNE U1,1
JRST .+3
LDEFA: SKIPL NNNONO ;IS THIS LESS THAN BEST
PUSHJ PDP,SAVMOV ;NOW SAVE BOARD
MOVE U1,U1S
JRST LMOVE+2
MOVEI U1,[ASCIZ /ILLEGAL BOOK MOVE /]
FORGIV: MOVEM U1,ERRMES#
PUSHJ PDP,MAGIN ;SEE IF WE CAN FORGIVE THIS BOOK MOVE ERROR
JRST ENDERR
CAIE U1,15 ;CR?
JRST .+10
PUSHJ PDP,NEWLIN ;YES, SO GET NEW LINE
JRST ENDERR
CAIN U1," "
JRST LBRNCH
CAIE U1,"&"
CAIN U1,"#"
JRST LTR
CAIE U1,"*"
JRST FORGIV+1
LOC: MOVE U1,ERRMES
PUSHJ PDP,PRINT
MOVEM X2,SAVX2
MOVE U1,LPOINT ;PRINT CURRENT VARIATION POINTER
SETZ X2,
JUMPE U1,.+3
LSHC U1,-7
JUMPN U1,.-1
MOVEM X2,ASCPNT#
MOVEI U1,ASCPNT
PUSHJ PDP,PRINT
MOVEI U1,[ASCIZ / MOVE /]
PUSHJ PDP,PRINT
MOVE U1,SAVX2 ;PRINT NUMBER OF MOVES WITHIN THIS VARIATION
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
LOC1: PUSHJ PDP,NEWLIN ;FIND TRUNK CARD
JRST ENDERR ;EOF NOT EXPECTED HERE
CAIN U1,"#" ;TRUNK CARD?
JRST LTR ;YES, SO GO TO LTR
CAIN U1,"&" ;A BOLAND HEADER CARD
JRST LTR ;YES
JRST .-6 ;NO, SO GET NEXT CARD
XCODE: PUSHJ PDP,MAGIN ;SKIP OVER BLANK
JRST ENDERR ;EOF NOT EXPECTED HERE
CAIN U1,"/" ;A "/"?
SOJA X2,XCODE ;YES, SO DON'T COUNT "X" & GET NEXT CHAR.
XCODE0: PUSHJ PDP,MAGIN ;GET NEXT CHARACTER
JRST ENDERR ;EOF FOUND, BUT NOT EXPECTED
CAIN U1," " ;A SPACE?
JRST XCODE0 ;YES, SO TRY AGAIN
CAIE U1,15 ;A <CR>?
JRST .+3
PUSHJ PDP,NEWLIN ;YES, SO GET NEW LINE
JRST ENDERR
CAIGE U1,72 ;IS IT A DIGIT?
CAIGE U1,60 ;IT IS IF 57 < U1 < 71.
CAIN U1,"*" ;NOT A NUMBER, SO IS IT A "*"?
AOSA X2 ;IT IS A NUMBER OR A STAR
JRST BEGIN2+2 ;NO MOVES FOLLOW "X"
CAIE U1,"*" ;IS IT A STAR?
JRST .+4 ;NO
SETOM DWFLAG ;YES, SO SET FLAG
PUSHJ PDP,NOSTO
SKIPA
PUSHJ PDP,NOSTO+2 ;GET BOOK MOVE
LA2: PUSHJ PDP,LEGAL ;START LOOKING FOR MOVES
JRST NOMOVE ;NO LEGAL MOVES, SO GO TO ERROR ROUTINE
AOSA X3
ADDI X3,1
CAIN X3,1 ;FIRST TIME THRU?
JRST LA3 ;YES, SO WE KNOW THIS IS NOT THE BOOK MOVE
SKIPL U1,U4S ;GET MOVE DELTA
JRST BM ;A BACKWARD MOVE
TRNE U1,3 ;RIGHT OR LEFT?
SKIPA U1,PLLF-1(X3) ;LF MOVE
MOVE U1,PLRF-1(X3) ;RF MOVE
JRST .+4
BM: TRNE U1,3 ;RIGHT OR LEFT?
SKIPA U1,PLRB-1(X3) ;RB MOVE
MOVE U1,PLLB-1(X3) ;LB MOVE
TDNN U1,U2SS ;AND HERE IS BOOK MOVE
JRST LA3 ;THEY DO NOT INTERSECT
MOVE A,PLA-1(X3)
MOVEM A,TA ;STORE BOARD AFTER X HAS BEEN COMPLETED
MOVEM A,PLA
MOVE P,PLP-1(X3)
MOVEM P,TP
MOVEM P,PLP
MOVE K,PLK-1(X3)
MOVEM K,TK
MOVEM K,PLK
MOVEI U2,1 ;IN CASE COLOR NEEDS CHANGING
TRNN X3,1 ;"X" CHANGE THE ACTIVE SIDE?
XORM U2,COLOR ;YES
SETZM X3
MOVE U2,BKMOVE
XOR U2,A
MOVEM U2,TP ;TP NOW SET UP
SKIPGE DWFLAG
JRST LA1 ;"X" FOLLOWED BY A "*"
JRST LA4
LA3: PUSHJ PDP,PUP
SOJA X3,.-1 ;BACK UP IF THIS LEVEL IS EXHAUSTED
MOVEM A,PLA(X3) ;FOR FUTURE PUP'S
MOVEM P,PLP(X3)
MOVEM K,PLK(X3)
CAIL X3,12 ;SHOULD WE GO DEEPER?
JRST LA3 ;NO, BACK-UP
JRST LA2 ;YES
BBRNCH: PUSHJ PDP,MAGIN
HALT
CAIE U1,11 ;LOOK FOR A TAB
JRST .-3
JRST KBRNC2 ;KEAR ROUTINE OK NOW
KBRNCH: MOVEI U2,↑D21
PUSHJ PDP,MAGIN ;GET 23RD CHAR.
HALT
SOJG U2,.-2
KBRNC2: PUSHJ PDP,MAGIN ;THIS IS 23RD CHAR.
HALT
MOVE U3,U1
PUSHJ PDP,MAGIN ;GET NEXT CHAR.
HALT
CAIN U1,15
JRST LDO+4
CAIE U1,11
CAIN U1," "
JRST KBRNC3
LSH U3,7 ;MOVE FIRST CHAR. OVER
IOR U3,U1 ;AND PUT IN SECOND CHAR.
JRST KBRNC4
KBRNC3: CAIL U3,60
CAILE U3,71
JRST .+3
ADDI U3,14000
JRST .+3
LSH U3,7
ADDI U3,60
KBRNC4: MOVEM U3,LPOINT ;STORE VAR. POINTER
PUSHJ PDP,MAGIN ;GET NEXT NON-SPACE CHAR.
HALT
CAIN U1,15 ;WAS CHARACTER A CR
JRST LDO+4 ;AN ERROR
CAIE U1,11 ;IS IT A TAB
CAIN U1," " ;IS IT A SPACE
JRST .-6 ;LAST CHAR. WAS A SPACE OR TAB
MOVE A,U1
PUSHJ PDP,MAGIN
HALT
CAIE U1,15
JRST KBRNC5
CAIL A,60
CAILE U1,71
JRST .+3
ADDI A,14000
JRST .+3
LSH A,7
ADDI A,60
JRST KBRNC6
KBRNC5: LSH A,7
IOR A,U1
KBRNC6: LSH A,16
IOR U3,A
JRST LDO+4 ;NOW GO FIND MATCH
LBRNCH: SKIPE PRNVAR
JRST LOC1
SETZB X2,U3 ;ZERO MOVE POINTER
SKIPE BOLFLG
JRST BBRNCH ;BOLAND FORMAT USED
SKIPE KEAR ;KEAR DATA?
JRST KBRNCH ;YES
MOVEI U2,↑D35 ;GET TO CHAR. #37
PUSHJ PDP,MAGIN ;GET CHAR.
JRST ENDERR
SOJG U2,.-2 ;JUMP IF NOT CHAR. #36
LUL: SETZM U2
LUPE: PUSHJ PDP,MAGIN ;GET CHAR. FROM INPUT BUFFER
JRST ENDERR ;EOF NOT EXPECTED HERE
CAIGE U1,72 ;IS CHAR. A DIGIT?
CAIGE U1,60 ;IT IS IF 57 < U1 < 72.
JRST LDO ;NO
IMULI U2,12
ADD U2,U1
SUBI U2,60
JRST LUPE
LDO: LSH U3,6 ;SAVE LAST NUMBER
ADD U3,U2
CAIE U1," " ;ARE WE THROUGH?
JRST LUL ;NO
MOVEM U3,LPOINT ;STORE THIS BRANCH NUMBER
MOVE U2,X4VAR ;X4VAR IS NUMBER OF SAVED BOARDS
CAMN U3,ME(U2) ;LOOK FOR PROPER TABLE ENTRY
JRST LHERE ;FOUND IT
SOJGE U2,.-2 ;KEEP LOOKING
TDZA U3,.+1 ;NO MATCH, SO VAR. POINTER ERROR?
777777740000
MOVE U2,X4VAR ;TRY AGAIN, THIS TIME WITH VAR. MASKED OUT
MOVE U1,ME(U2)
TRZ U1,740000
CAIN U3,(U1) ;ARE MOVE POINTERS EQUAL?
JRST LHERE ;YES, SO THIS IS THE ONE WE WANT, WE HOPE
SOJGE U2,.-4
MOVEI U1,[ASCIZ /BAD TRUNK /]
JRST FORGIV
LHERE: MOVE A,MA(U2) ;GET THE BOARD
MOVEM A,TA ;PUT IT IN PROPER PLACE
MOVE P,MP(U2)
MOVEM P,TP
MOVE K,MK(U2)
SETZM COLOR
TRZE K,400 ;BIT 27 OF K HAS COLOR
AOS COLOR
MOVEM K,TK
MOVE U1,MWL(U2)
HRRZM U1,WHOWON
HLRZM U1,WINLOS
JRST BEGIN2 ;NOW START LEARNING
NOMOV: MOVEI U1,[ASCIZ /"LMOVE" ERROR: NO LEGAL MOVES /]
JRST FORGIV
NOMOVE: MOVEI U1,[ASCIZ /"X" ERROR: NO LEGAL MOVES /]
JRST FORGIV
ENDERR: MOVEI U1,[ASCIZ /EOF FOUND, BUT NOT EXPECTED /]
JRST FORGIV
LERR: MOVE U2,U1
MOVEI U1,[ASCIZ /LEARNING OVERFLOW/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
MOVE U1,U2
JRST X4VAR
NOSTO: PUSHJ PDP,MAGIN ;GET FIRST NUMBER
JRST ENDERR ;EOF IS NOT AN ACCEPTABLE NUMBER
MOVE U2,U1
IMULI U2,12
PUSHJ PDP,MAGIN ;GET SECOND NUMBER
JRST ENDERR
ADD U1,U2
SUBI U1,1020 ;NORMALIZE FOR ASCII CODE
PUSHJ PDP,OUTIN
MOVE U4,U1
MOVNS U1
MOVSI U3,400000
LSH U3,(U1) ;CREATE PROPER BIT POSITION
PUSHJ PDP,MAGIN ;SAME ROUTINE AS ABOVE
JRST ENDERR
MOVE U2,U1
IMULI U2,12
PUSHJ PDP,MAGIN
JRST ENDERR
ADD U1,U2
SUBI U1,1020
PUSHJ PDP,OUTIN
SUB U4,U1 ;U4 IS MOVE DELTA
MOVM U5,U4
MOVNS U1
MOVSI U2,400000
LSH U2,(U1) ;U3-U2 IS MOVE
MOVEM U3,U2SS ;SOURCE BIT
MOVEM U4,U4S ;MOVE DELTA
IOR U2,U3
MOVEM U2,BKMOVE ;SAVE FOR ROTE
XOR U2,A
MOVEM U2,TP ;BOOK MOVE TO VERIFY
POPJ PDP,
STOP: Z ;STOP LOOK AHEAD WORD
STOMP: 0 ;CLEAN UP STOP
1 ;INDEXED BY X3
3
7
17
37
77
177
STTEST: 0 ;TO TEST OTHER SIDE EVAL
1 ;INDEXED BY X3
2
5
12
25
52
125
STBIT: 1 ;NORMAL MOVE INDICATORS FOR STOP WORD
2 ;INDEXED BY X3
4
10
20
40
100
200
;MACRO USED INL25B
DEFINE TAB (T) <;TABLE COEF. MACRO
SETZ X1,
MOVE Z,T(X1)
PUSHJ PDP,TRJOUT
ADDI X1,1
CAIGE X1,5
JRST .-4>
LINEAR: MOVE A,[XWD -1,LRNPDL]
SKIPN LFLAG1
JRST L1
SKIPN RFLAG
JRST .+4
SETZM RFLAG
SETOM LFLAG5
SETOM LFLAG6
SKIPN LFLAG5
JRST L1
SETZ X4,
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /LINEAR TERM COEFFICIENTS/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
L1: POP A,K ;GET TABLE START
JUMPE K,L21A ;LAST AT THIS LEVEL
POP A,Q ;GET RESULT START
MOVEI P,3 ;PHASE COUNTER
SKIPN LFLAG5
JRST L2
REPEAT 4,<
REPEAT 3,< XCT TLIST(X4)
ADDI X4,1
PUSHJ PDP,PRINT>
PUSHJ PDP,TERPRI
ADDI X4,17>
SUBI X4,105
L2: MOVEI U3,26 ;ENTRIES PER TABLE
MOVNM U3,U3S#
HRRM K,L5 ;FIX UP ADDRESSES
HRRM K,L5A
HRRM K,AC
HRRM K,AC1
HRRM K,L10
HRRM K,L10A
HRRM Q,L12
HRRM Q,C3P
HRRM Q,C3N
HRRM Q,AC2
HRRM Q,C6
HRRM Q,C5
MOVEI X1,12
SETZM TRMA(X1) ;CLEAR TABLES
SOJGE X1,.-1
MOVEI X1,2
L3: MOVEI X2,2
L4: MOVEI X3,4
L5: MOVE Z,(U3)
TDNN Z,[200000200000]
JRST .+4
LSH Z,-1 ;DIVIDE TO PREVENT OVERFLOW
AND Z,[177777177777]
L5A: MOVEM Z,(U3)
ASH Z,-2 ;TO HELP OVERFLOW PROBLEM
AND Z,DIVMSK
ADDM Z,TRMA(X1)
ADDM Z,TRMB(X2)
ADDM Z,TRMC(X3)
SUBI U3,1
SOJGE X3,L5
SOJGE X2,L4
SOJGE X1,L3
SKIPN LFLAG1
JRST .+10
MOVE Z,TRMA
ADD Z,TRMA+2
ADDB Z,TRMA+1 ;CAN USE TEMPORARILY
LSH Z,-22
ADD Z,TRMA+1
ANDI Z,777777
MOVEM Z,TRMAT#
SETZM TRMA+1 ;REQUIRED BY SYMETRY
SETZM TRMB+1
SETZM TRMC+2
MOVS Z,TRMA
ADDB Z,TRMA+2
MOVSM Z,TRMA ;THIS ADDS THESE CORRECTLY
SKIPE LFLAG1 ;DO WE PRINT
PUSHJ PDP,LRJOUT
MOVS Z,TRMB
ADDB Z,TRMB+2
MOVSM Z,TRMB
SKIPE LFLAG1
PUSHJ PDP,LRJOUT
MOVS Z,TRMC
ADDB Z,TRMC+4
MOVSM Z,TRMC
SKIPE LFLAG1
PUSHJ PDP,LRJOUT
MOVS Z,TRMC+1
ADDB Z,TRMC+3
MOVSM Z,TRMC+1
SKIPE LFLAG1
PUSHJ PDP,LRJOUT
MOVEI U3,26
SETZM CPOS# ;COUNT OF POSITIVE ENTRIES
SETZM CNEG# ;COUNT OF NEGATIVE ENTRIES
MOVEI X1,2
L7: MOVEI X2,2
L8: MOVEI X3,4
L9: SETZ Z,
SKIPN LFLAG2
JRST L10
ADD Z,TRMA(X1)
ADD Z,TRMB(X2)
ADD Z,TRMC(X3)
TRNN Z,400000 ;TEST FOR RIGHT OVERFLOW
TLNE Z,200000 ;TEST FOR LEFT OVERFLOW
PUSHJ PDP,LZ ;REPORT TROUBLE
L9A: ASH -6 ;DIVIDE BY 64
MOVE U1,WEIGHT
AND Z,LMSKW(U1) ;PURGE UNDERFLOW
L10: ADD Z,(U3)
SKIPN LFLAG7
JRST L10C
MOVN U1,U3
L10A: MOVS U2,(U1)
L10B: LSH U2,-1
MOVE U1,WEIGH1
AND U2,LMSKW(U1)
ADD Z,U2
L10C: HLRZ U1,Z
HRRZ U2,Z
JUMPE Z,L12
SUB U1,U2
LSH U2,1
ADD U2,U1
ASH U1,14 ;MULTIPLY BY 4096
MOVEM X2,X2S
IDIV U1,U2
MOVE X2,X2S
SKIPLE U1
AOS CPOS ;COUNT POS ENTRIES
SKIPGE U1
AOS CNEG ;COUNT NEG ENTRIES
SKIPE U1 ;DO NOT BOTHER WITH ZERO ENTRIES
ADD U1,CORADD
L12: MOVEM U1,(U3)
SUBI U3,1
SOJGE X3,L9
SOJGE X2,L8
SOJGE X1,L7
MOVE X5,CPOS ;ENTRIES
LSH X5,-1 ;DIVIDE BY 2
MOVEM X5,CPOS ;ENTRIES PER BUCKET
ADDI X5,1 ;TAPER SIZES
MOVEI U5,2 ;LARGEST QUANTUM
SETZB U1,U2 ;SAFETY MEASURE
L14: MOVEI U3,26 ;TO INDEX TABLE
PUSHJ PDP,C2P ;FIND NEXT TO FIX
MOVE X5,CPOS ;RESET ENTRIES
SUBI X5,3 ;TAPER,REMEMBER
SOJGE U5,L14
MOVE X5,CNEG
LSH X5,-1
MOVEM X5,CNEG
ADDI X5,1
MOVEI U5,2
SETZB U1,U2
L14N: MOVEI U3,26
PUSHJ PDP,C2N
MOVE X5,CNEG
SUBI X5,3 ;TAPER
SOJGE U5,L14N
SKIPE LFLAG5
PUSHJ PDP,TERPRI
ADDI K,SIGSIZ ;FOR NEXT PHASE
ADDI Q,SIGSIZ
SOJGE P,L2 ;COUNT PHASES
SKIPN LFLAG5
JRST L1
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
JRST L1 ;TO NEXT TABLE
L21A: SKIPN LFLAGT
JRST L21
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /FIRST-LEVEL TABLE COEF./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
L21: POP A,K
SKIPE LFLAG6
SETZM LFLAG5
JUMPLE K,L31 ;LAST AT THIS LEVEL
POP A,Q
JUMPLE Q,L31
MOVEI P,3 ;T0 COUNT PHASES
L22: SKIPN LFLAGT
JRST L22A
MOVEI X1,16
SETZM TABA(X1)
SOJGE X1,.-1
MOVEI X1,4
MOVEI X2,4
MOVEI X3,4
L22A: SETZM CPOS
SETZM CNEG
HRRM K,AC
HRRM K,ACZ
HRRM K,AC1
HRRM Q,AC2
HRRM Q,C3P
HRRM Q,C3N
HRRM Q,C6
HRRM Q,C5
MOVEI U3,76 ;COUNT ENTRIES
MOVNM U3,U3S
AC: MOVE Z,(U3)
TDNN Z,[200000200000]
JRST .+4
LSH Z,-1
AND Z,[177777177777]
ACZ: MOVEM Z,(U3)
SKIPN LFLAGT
JRST .+11
ADDM Z,TABA(X1)
ADDM Z,TABB(X2)
ADDM Z,TABC(X3)
SOJGE X3,.+5
SOJGE X2,.+3
SUBI X1,1
MOVEI X2,4
MOVEI X3,4
SKIPN LFLAG8
JRST AC3A
MOVN U1,U3
AC1: MOVS U2,(U1)
AC3: LSH U2,-1
MOVE U1,WEIGH2
AND U2,LMSKW(U1)
ADD Z,U2
AC3A: HLRZ U1,Z
HRRZ U2,Z
JUMPE Z,AC2
SUB U1,U2
LSH U2,1
ADD U2,U1
ASH U1,14 ;PLENTY OF SPREAD
MOVEM X2,X2SAC#
IDIV U1,U2
MOVE X2,X2SAC
SKIPLE U1
AOS CPOS
SKIPGE U1
AOS CNEG
SKIPE U1
ADD U1,CORADD
AC2: MOVEM U1,(U3)
SUBI U3,1
CAML U3,U3S
JRST AC
MOVE X5,CPOS
IDIVI X5,7
ADDI X5,3 ;MAKE OUTSIDE BUCKETS LARGER
MOVEM X5,CPOS
ADDI X5,1
MOVEI U5,7
SETZB U1,U2 ;SAFETY MEASURE
L25B: MOVEI U3,76
PUSHJ PDP,C2P ;FIND LARGEST
SOS CPOS ;TO TAPER SIZES
MOVE X5,CPOS ;RESET ENTRIES
SOJGE U5,L25B
MOVE X5,CNEG
IDIVI X5,7
ADDI X5,3 ;OUTSIDE BUCKETS LARGER
MOVEM X5,CNEG
ADDI X5,1
MOVEI U5,7
SETZB U1,U2
L25BN: MOVEI U3,76
PUSHJ PDP,C2N
SOS CNEG ;TO TAPER SIZES
MOVE X5,CNEG
SOJGE U5,L25BN
SKIPN LFLAGT
JRST L25C
MOVEM X1,X1SL25#
TAB TABA
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
TAB TABB
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
TAB TABC
MOVE X1,X1SL25
PUSHJ PDP,TERPRI
L25C: ADDI K,SIGSIZ
ADDI Q,SIGSIZ
SOJGE P,L22 ;TO NEXT PHASE
SKIPE LFLAGT
PUSHJ PDP,TERPRI
JRST L21 ;TO NEXT TABLE
TRJOUT: HLRZ U1,Z
HRRZ U2,Z
SUB U1,U2
LSH U2,1
ADD U2,U1
MOVEM X1,X1STJ#
MOVEM X2,X2STJ#
IMULI U1,310
IDIV U1,U2
TRNE U1,1
ADDI U1,2
ASH U1,-1
PUSHJ PDP,RJOUT1
MOVE X1,X1STJ
MOVE X2,X2STJ
POPJ PDP,
L31: MOVEI K,SIGLF ;START THIRD LEVEL
MOVEI Q,SIGTF
MOVEI P,3
L32: HRRM K,L34
HRRM K,L34Z
HRRM K,L34A
HRRM Q,L35
HRRM Q,C3P
HRRM Q,C3N
HRRM Q,C5
HRRM Q,C6
MOVEI U3,160
MOVNM U3,U3S
SETZM CPOS
SETZM CNEG
L34: MOVE Z,(U3)
TDNN Z,[200000200000]
JRST .+4
LSH Z,-1
AND Z,[177777177777]
L34Z: MOVEM Z,(U3)
SKIPN LFLAG9
JRST L34C
MOVN U1,U3
L34A: MOVS U2,(U1)
L34B: LSH U2,-1
MOVE U1,WEIGH3
AND U2,LMSKW(U1)
ADD Z,U2
L34C: HLRZ U1,Z
HLRZ U1,Z
JUMPE Z,L35
HRRZ U2,Z
SUB U1,U2
LSH U2,1
ADD U2,U1
CAIGE U2,10
SETZ U1,
ASH U1,14 ;MULTIPLY BY 4096
IDIV U1,U2
SKIPLE U1
AOS CPOS
SKIPGE U1
AOS CNEG
SKIPE U1
ADD U1,CORADD
L35: MOVEM U1,(U3)
SUBI U3,1 ;TO NEXT PHASE
CAML U3,U3S
JRST L34
SETZ X5,
MOVE U5,CPOS
SETZB U1,U2
L35B: MOVEI U3,160
PUSHJ PDP,C2P
SETZ X5,
SOJGE U5,L35B
SETZ X5,
MOVE U5,CNEG
L35BN: MOVEI U3,160
PUSHJ PDP,C2N
SETZ X5,
SOJGE U5,L35BN
ADDI K,SIGSIZ
ADDI Q,SIGSIZ
SOJGE P,L32
SETZM LFLAGT ;TERMINATE F COMMAND
POPJ PDP,
C2P: MOVEI Z,10001 ;A LARGE NO.
MOVNM Z,LARGE#
C3P: MOVE Z,(U3)
CAMGE Z,CORCOM
JRST C4P ;ALREADY PROCESSED
SUB Z,CORADD
JUMPLE Z,C4P
CAMG Z,LARGE
JRST .+3
MOVEM Z,LARGE ;SAVE IF LARGER
MOVE U1,U3 ;SAVE INDEX
C4P: SUBI U3,1
CAML U3,U3S
JRST C3P
SKIPL LARGE
C5: MOVEM U5,(U1) ;QUANTIZE
SOSGE X5
POPJ PDP,
SOS (PDP)
SOS (PDP)
POPJ PDP,
C2N: MOVEI Z,10001 ;A LARGE NO.
MOVEM Z,SMALL#
C3N: MOVE Z,(U3)
CAMGE Z,CORCOM
JRST C4N ;ALREADY PROCESSED
SUB Z,CORADD
JUMPGE Z,C4N
CAML Z,SMALL
JRST .+3
MOVEM Z,SMALL ;SAVE IF SMALLER
MOVE U2,U3 ;SAVE INDEX
C4N: SUBI U3,1
CAML U3,U3S
JRST C3N
SKIPG SMALL
C6: MOVNM U5,(U2) ;QUANTIZE
SOSGE X5
POPJ PDP,
SOS (PDP)
SOS (PDP)
POPJ PDP,
CORCOM: 300000000000
CORADD: 377000000000
WEIGH1: 1
WEIGH2: 1
WEIGH3: 1
WEIGHT: 6
LMSKW: 777777777777
377777377777
177777177777
077777077777
037777037777
017777017000
007777007777
003777003777
001777001777
000777000777
000377000377
000177000177
000077000077
000037000037
000017000017
000007000007
000003000003
000001000001
000000000000
Z
Z
SIGT22
SIGL22
SIGT21
SIGL21
Z
SIGT16
SIGL16
SIGT15
SIGL15
SIGT14
SIGL14
SIGT13
SIGL13
SIGT12
SIGL12
SIGT11
LRNPDL: SIGL11
LRJOUT: HLRZ U1,Z
HRRZ U2,Z
SUB U1,U2
LSH U2,1
ADD U2,U1
MOVEM X1,X1S
MOVEM X2,X2S
IMULI U1,310 ;MULTIPLY BY 200
SKIPN LFLAG5
JRST .+6
MOVEM U1,U1S#
IMULI U1,5
IDIV U1,TRMAT
PUSHJ PDP,RJOUT3
MOVE U1,U1S
IDIV U1,U2 ;WARNING DISTROYS X2
TRNE U1,1
ADDI U1,2
ASH U1,-1 ;DIVIDE BY 2
PUSHJ PDP,RJOUT2
SKIPN LFLAG5
JRST .+3
MOVE U1,U2
PUSHJ PDP,RJOUT
MOVE X1,X1S
MOVE X2,X2S
POPJ PDP,
LZ: MOVEM X2,X2S
MOVEM X1,X1S
MOVEI U1,[ASCIZ /TRM OVERFLOW /]
PUSHJ PDP,PRINT
MOVE U1,X1S
PUSHJ PDP,NUMOUT
MOVE U1,X2S
PUSHJ PDP,NUMOUT
MOVE U1,X3
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
MOVE X1,X1S
MOVE X2,X2S
POPJ PDP,
RJOUT1: SETZ X2,
SKIPGE U1
SOS X2
MOVM Z,U1
JRST RJ2
RJOUT2: SETZ X2,
SKIPGE U1
SOS X2 ;SPACE FOR - SIGN
MOVM Z,U1
RJ2A: SKIPE LFLAG5
JRST RJ2
POPJ PDP,
RJOUT3: SETZ X2,
SKIPGE U1
SOS X2
MOVM Z,U1
JRST RJ4
LDEPTH: 0 ;LEARNING DEPTH CONTROL
KDEPTH: 3 ;SECOND DEPTH CONTROL NUMBER
LFLAG1: 1 ;NON-ZERO TO SAVE LINEARIZE
LFLAGZ: 1 ;LINEARIZE
LFLAG2: 1 ;TO LINEARIZE SIG
LFLAG3: Z ;TO LINEARIZE LRN
LFLAG5: Z
LFLAG6: Z
LFLAG7: 1
LFLAG8: 1
LFLAG9: 1
TRUNKF: 0
SMOOTH: Z
SMFAZE: 1
PRNVAR: 0
DORM: Z ;NOT 0 TO SAVE PLOT DATA
DSKTAP: Z ;0 FOR DSK AT START
TRMA: BLOCK 3
TRMB: BLOCK 3
TRMC: BLOCK 5
TABA: BLOCK 5
TABB: BLOCK 5
TABC: BLOCK 5
TOTALS: MOVEI U1,[ASCIZ / TOTALS /]
PUSHJ PDP,PRINT
MOVE U1,LABELD+1
IDIVI U1,↑D1000
PUSHJ PDP,RJOUT1
MOVEI P,SIGSIZ*3
TOTAL2: MOVE U2,LABEL+2(P)
ADDM U2,TLOW
ADD U2,LABEL+4(P)
ADD U2,LABEL+3(P)
MOVE U1,LABEL+3(P)
ASH U1,-1
ADD U1,LABEL+2(P)
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT3
MOVE U1,LABEL+3(P)
ADDM U1,TEQUAL
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT1
MOVE U1,LABEL+4(P)
ADDM U1,THIGH
SUBI P,SIGSIZ
JUMPGE P,TOTAL2
MOVE U1,LABEL+1
PUSHJ PDP,RJOUT3
MOVE U2,TEQUAL
MOVE U1,U2
ADD U2,TLOW
ADD U2,THIGH
ASH U1,-1
ADD U1,TLOW
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT3
MOVE U1,TEQUAL
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT1
PUSHJ PDP,TERPRI
SETZM THIGH
SETZM TLOW
SETZM TEQUAL
MOVEI P,SIGSIZ*3
MOVEI U1,[ASCIZ / MOVES /]
PUSHJ PDP,PRINT
MOVE U1,LABEL+2(P)
ADD U1,LABEL+3(P)
ADD U1,LABEL+4(P)
PUSHJ PDP,RJOUT
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SUBI P,SIGSIZ
JUMPGE P,.-6
PUSHJ PDP,TERPRI
POPJ PDP,
;SUBROUTINE TO SYMETRICALLY SMOOTH LEARNING DATA
SYM: MOVE A,[XWD -1,SYMPDL]
SYM0: POP A,K
JUMPE K,SYM10
POP A,U2
MOVEI P,3
SYM1: HRRM K,SYM3
HRRM K,SYM4
HRRM K,SYM5
HRRM K,SYM6
MOVE U3,U2
SYM2: MOVN U1,U3
SYM3: MOVS Z,(U1)
SYM4: ADD Z,(U3)
LSH Z,-1
AND Z,LMSKW+1
SYM5: MOVEM Z,(U3)
SYM6: MOVSM Z,(U1)
SUBI U3,1
JUMPGE U3,SYM2
ADDI K,SIGSIZ
SOJGE P,SYM1
JRST SYM0
SYM10: POPJ PDP,
Z
Z
160
SIGLF
76
SIGL22
76
SIGL21
26
SIGL16
26
SIGL15
26
SIGL14
26
SIGL13
26
SIGL12
26
SYMPDL: SIGL11
FACTOR: SETZB U2,U3
MOVEI U4,LRN11
FACTO2: MOVEI U1,SIGSIZ-6 ;ALLOW FOR LABEL OF 5
HRRM U4,.+2
HRRM U4,.+3
HLRZ Z,LRN11(U1)
ADD U2,Z
HRRZ Z,LRN11(U1)
ADD U3,Z
SOJGE U1,.-4
ADDI U4,SIGSIZ
CAIGE U4,LRN11+SIGSIZ*4
JRST FACTO2
IMULI U3,144
IDIV U3,U2
SKIPN TRUNKF
JRST .+6
MOVEI U1,[ASCIZ /FACTOR IS /]
PUSHJ PDP,PRINT
MOVE U1,U3
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
MOVE U4,LRN11
FACTO3: MOVEI U1,SIGSIZ-6
HRRM U4,.+2
HRRM U4,.+4
HLLZ U2,LRN11(U1)
IDIVI U2,144
IMUL U2,U3
HLLM U2,LRN11(U1)
SOJGE U1,.-4
ADDI U4,SIGSIZ
CAIGE U4,LRN11+SIGSIZ*4
JRST FACTO3
POPJ PDP,
DIVIDE: MOVEI U4,LRN11
MOVE U2,DIVMSK
MOVEI U1,SIGSIZ-6
HRRM U4,.+2
HRRM U4,.+5
MOVE Z,LRN11(U1)
LSH Z,-1
AND Z,U2
TDNE Z,[777000777000] ;DO NOTHING IF SMALL
MOVEM Z,LRN11(U1)
SOJGE U1,.-5
ADDI U4,SIGSIZ
CAIGE U4,LRN11+SIGSIZ*4
JRST .-13
MOVEI U1,[ASCIZ /TABLES HALVED/]
PUSHJ PDP,PRINT
JRST TERPRI
DIVMSK: 177777177777
DIVIDT: MOVE U2,[200000400000]
MOVEI U4,LRN11
MOVEI U1,SIGSIZ-6
HRRM U4,.+1
MOVE Z,LRN11(U1)
AND Z,U2
JUMPN Z,.+6
SOJGE U1,.-3
ADDI U4,SIGSIZ
CAIGE U4,LRN11+SIGSIZ*4
JRST .-10
POPJ PDP,
MOVEI U1,[ASCIZ /TIME TO DIVIDE/]
PUSHJ PDP,PRINT
JRST TERPRI
;TYPING OF LEARN COMMAND WILL SET LFLAG AND
;GO TO BEGIN
;TYPING OF LEARN, ZERO, TABLES WILL ZERO ALL
;LEARNING TABLES AND BRANCH TO ABOVE COMMAND
;INTERPRETATION.
LZERO: SETZM LABELD
MOVE Z,[XWD LABELD,LABELD+1]
BLT Z,LABELD+SIGSIZ*4-1
POPJ PDP,
ZL: MOVEI U5,4
SETZM LABELD(U5)
SETZM LABEL(U5)
SETZM LABEL+SIGSIZ(U5)
SETZM LABEL+SIGSIZ*2(U5)
SETZM LABEL+SIGSIZ*3(U5)
SOJGE U5,.-5
POPJ PDP,
LC: PUSHJ PDP,LPTFIX
SETCMM LPFLAG
MOVEI U1,[ASCIZ /FILE NAME # BDS 2 MVS /]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
INIT 12,17
SIXBIT /DSK/
Z
HALT
SETZM TTNMVS ;FOR TOTALS
SETZM TTNBDS
MOVEI U2,INPSIZ-1
SETZM INPA(U2)
SOJGE U2,.-1
MOVEI U5,2
MOVE U2,[SIXBIT /MA/]
MOVEM U2,DSKBKE#
MOVE U2,[ASCIZ /MA/]
MOVEM U2,LC7SAE
LC2: MOVEI X4,14
LC3: MOVEI X5,20 ;TO INDEX CRIP
LC3A: MOVE U2,DSKBKE
MOVEM U2,DSKBKD
MOVE U2,LC7SAE
MOVEM U2,LC7SAV
LC4: MOVE U2,CRIP(X4)
LSH U2,14
IOR U2,CRIP(X5)
IOR U2,DSKBKD
MOVEM U2,DSKBKM
MOVE U2,[SIXBIT /CHK/]
MOVEM U2,DSKBKM+1
MOVE U2,[055000000000]
MOVEM U2,DSKBKM+2
MOVE U2,[SIXBIT / 3ALS/]
MOVEM U2,DSKBKM+3
LC5: LOOKUP 12,DSKBKM
JRST LC10 ;NO FILE
INPUT 12,BKMIN
SETZM TNOBDS
SETZM TNOMVS
MOVEI U4,INPSIZ/BLOWUP-2
CAIGE U5,2
MOVEI U4,INPSIZ/BLOWUP-3
LC6: SKIPN U3,INPP(U4)
JRST LC6A ;LAST LINE OF THIS FILE
CAIGE U5,2
JRST .+3
TDNE U3,[400400400400] ;ARE THERE TWO MOVES
AOS TNOMVS ;YES
AOS TNOBDS
LC6A: SUBI U4,2
CAIGE U5,2
SUBI U4,1
JUMPGE U4,LC6 ;TEST NEXT ENTRY
LC7: MOVEI U1,LC7SAV
PUSHJ PDP,PRINT
MOVEI U1,LASCIZ(X4)
PUSHJ PDP,PRINT
MOVEI U1,LASCIZ(X5)
PUSHJ PDP,PRINT
MOVEI X1,11
PUSHJ PDP,TYO
MOVE U1,TNOBDS
ADDM U1,TTNBDS
PUSHJ PDP,RJOUT
MOVEI X1,11
PUSHJ PDP,TYO
MOVE U1,TNOMVS
ADDM U1,TTNMVS
PUSHJ PDP,RJOUT
PUSHJ PDP,TERPRI
SKIPN INPA+INPSIZ/BLOWUP-2 ;MORE MINORS
JRST LC10 ;NO
MOVE U2,DSKBKD
ADD U2,[000100000000]
MOVEM U2,DSKBKD
MOVE U2,LC7SAV
ADD U2,[000020000000]
MOVEM U2,LC7SAV
JRST LC4
LC10: SOJGE X5,LC3A
SOJG X4,LC3
CAIGE U5,2
JRST .+7
PUSHJ PDP,TERPRI
MOVE U2,[SIXBIT /KA/]
MOVEM U2,DSKBKE
MOVE U2,[ASCIZ /KA/]
MOVEM U2,LC7SAE
SOJG U5,LC2
LC20: PUSHJ PDP,TERPRI
SETZM FILEIN
SETZM DSKBKM
SETZM FILCHG
MOVEI U1,[ASCIZ /TOTALS/]
PUSHJ PDP,PRINT
MOVEI X1,11
PUSHJ PDP,TYO
MOVE U1,TTNBDS
PUSHJ PDP,RJOUT
MOVEI X1,11
PUSHJ PDP,TYO
MOVE U1,TTNMVS
PUSHJ PDP,RJOUT
PUSHJ PDP,TERPRI
RELEAS 12,
JRST LPTFIX ;POPJ FROM THERE
LC7SAV: Z ;TO SAVE ASCIZ
LC7SAE: Z ;DITTO
LASCIZ: ASCIZ /00/
ASCIZ /01/
ASCIZ /02/
ASCIZ /03/
ASCIZ /04/
ASCIZ /05/
ASCIZ /06/
ASCIZ /07/
ASCIZ /08/
ASCIZ /09/
ASCIZ /10/
ASCIZ /11/
ASCIZ /12/
ASCIZ /13/
ASCIZ /14/
ASCIZ /15/
ASCIZ /16/
TTNMVS: Z ;TOTAL NUMBER OF 2 MOVE BOARDS
TTNBDS: Z ;TOTAL NUMBER OF BOARDS
TNOBDS: Z ;BOARDS FOR THIS FILE
TNOMVS: Z ;NUMBER OF TWO MOVE BOARDS
SUBTTL MACROS FOR SIGNATURE TABLES
DEFINE MAC1 (S) <;OUTER MACRO
SETZ U1,
MAC2 \<3*S-2>
IMULI U1,5
MAC2 \<3*S-1>
IMULI U1,5
MAC2 \<3*S>
ADD U1,PHASAD
SKIPE LFLAG
ADDM X1,SIGL2'S(U1)
ADD U5,SIGT2'S(U1)>
DEFINE MAC2 (SC) <;CENTRAL MACRO
MAC3 1
MOVE U2,Q
IMULI U2,3
MAC3 1
ADD U2,Q
IMULI U2,5
MAC3 2
ADD U2,Q
ADD U2,PHASAD
SKIPN LFLAG
JRST .+5
MOVE Z,SIGT1'SC(U2)
MOVE U3,SI
MOVEM Z,SIGZ1'SC(U3)
ADDM X1,SIGL1'SC(U2)
ADD U1,SIGT1'SC(U2)>
DEFINE MAC3 (C) <;INNER MACRO
SETZB Q,P
LSHC Q,4
LSHC P,4
SUB Q,P
CAILE Q,C
MOVEI Q,C
CAMGE Q,NEG+C
MOVNI Q,C>
EVA: MOVEM X1,CFZ1 ;SAVE X1
PUSHJ PDP,PCCNT ;COUNT PIECES
MOVE U4,CFLAG ;SEE WHAT KIND OF EVALUATION TO DO
JUMPE U4,CFA1
LEV1: MOVE A,EEB2(X3)
MOVE K,EEB2-1(X3)
SETZ U5,
MAC1 1
IMULI U5,17
MOVE A,EEB(X3)
MOVE K,EEB-1(X3)
MAC1 2
ADD U5,PHASAD
MOVE Z,SIGTF(U5) ;GET FINAL SCORE
SKIPE LFLAG
POPJ PDP, ;LEARNING EXIT
CFC: ADD Z,U3 ;ADD IN PIECE-COUNT TO SCORE
MOVE X1,PLY(X2) ;PLY AT WHICH TIP WAS ENTERED
ADD X1,X3 ;PLUS PLY IN TIP GIVES TRUE PLY
SUBI X1,40
ASH Z,5
SKIPL Z
MOVNS X1
ADD Z,X1 ;ADD PLY TO SCORE
MOVE X1,CFZ1 ;RESTORE X1 FOR RETURN
POPJ PDP, ;RETURN--SCORE IS LEFT IN Z
CFA1: MOVE Z,U3 ;THIS IS ONLY EXECUTED IF CFLAG=0
MOVE X1,PLY(X2)
ADD X1,X3
SUBI X1,77
SKIPL Z
MOVNS X1
ADD Z,X1
CFA3: MOVE X1,CFZ1 ;RESTORE X1 FOR RETURN
POPJ PDP, ;RETURN--SCORE IS LEFT IN Z
SIGSIZ=1356 ;SIZE OF SIG+LABEL IS 750
PHASAD: Z
PHASES: 0
SIGSIZ
SIGSIZ*2
SIGSIZ*3
NEG: 0 ;NEGATION TABLE
-1
-2
-3
-4
-5
-6
-7
-10
DSAVE: INIT 7,17
SIXBIT /DSK/
Z
JRST DSKERR
MOVE U1,[SIXBIT /ING/]
MOVEM U1,DATA+1
MOVE U1,[055000000000]
MOVEM U1,DATA+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,DATA+3
ENTER 7,DATA
JRST DSKERR
OUTPUT 7,MTAOUT
CLOSE 7,
MOVE U1,[SIXBIT /SIGT0/]
MOVEM U1,SIGDAT
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGDAT+1
MOVE U1,[055000000000]
MOVEM U1,SIGDAT+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,SIGDAT+3
ENTER 7,SIGDAT
JRST DSKERR
OUTPUT 7,SIGT0
CLOSE 7,
MOVE U1,[SIXBIT /SIGT1/]
MOVEM U1,SIGDAT
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGDAT+1
MOVE U1,[055000000000]
MOVEM U1,SIGDAT+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,SIGDAT+3
ENTER 7,SIGDAT
JRST DSKERR
OUTPUT 7,SIGT1
CLOSE 7,
MOVE U1,[SIXBIT /SIGT2/]
MOVEM U1,SIGDAT
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGDAT+1
MOVE U1,[055000000000]
MOVEM U1,SIGDAT+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,SIGDAT+3
ENTER 7,SIGDAT
JRST DSKERR
OUTPUT 7,SIGT2
CLOSE 7,
MOVE U1,[SIXBIT /SIGT3/]
MOVEM U1,SIGDAT
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGDAT+1
MOVE U1,[055000000000]
MOVEM U1,SIGDAT+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,SIGDAT+3
ENTER 7,SIGDAT
JRST DSKERR
OUTPUT 7,SIGT3
RELEAS 7,
MOVEI U1,[ASCIZ /DSAVED AS LEARN.ING/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
POPJ PDP,
RSAVE: INIT 7,17
SIXBIT /DSK/
JRST DSKERR
ENTER 7,RDATA
JRST DSKERR
OUTPUT 7,MTAOUT
RELEAS 7,
MOVEI U1,[ASCIZ /DSAVED AS LEARN.DAT/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
POPJ PDP,
RFILL: INIT 7,17
SIXBIT /DSK/
Z
JRST DSKERR
LOOKUP 7,RDATA
JRST DSKERR
INPUT 7,MTAOUT
RELEAS 7,
MOVEI U1,[ASCIZ /FILLED FROM LEARN.DAT/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
POPJ PDP,
DFILL: INIT 7,17
SIXBIT /DSK/
Z
JRST DSKERR
MOVE U1,[SIXBIT /ING/]
MOVEM U1,DATA+1
MOVE U1,[055000000000]
MOVEM U1,DATA+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,DATA+3
LOOKUP 7,DATA
JRST DSKERR
DFILL2: INPUT 7,MTAOUT
MOVE U1,[SIXBIT /SIGT0/]
MOVEM U1,SIGDAT
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGDAT+1
MOVE U1,[055000000000]
MOVEM U1,SIGDAT+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,SIGDAT+3
LOOKUP 7,SIGDAT
JRST DSKERR
INPUT 7,SIGT0
MOVE U1,[SIXBIT /SIGT1/]
MOVEM U1,SIGDAT
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGDAT+1
MOVE U1,[055000000000]
MOVEM U1,SIGDAT+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,SIGDAT+3
LOOKUP 7,SIGDAT
JRST DSKERR
INPUT 7,SIGT1
MOVE U1,[SIXBIT /SIGT2/]
MOVEM U1,SIGDAT
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGDAT+1
MOVE U1,[055000000000]
MOVEM U1,SIGDAT+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,SIGDAT+3
LOOKUP 7,SIGDAT
JRST DSKERR
INPUT 7,SIGT2
CLOSE 7,
MOVE U1,[SIXBIT /SIGT3/]
MOVEM U1,SIGDAT
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGDAT+1
MOVE U1,[055000000000]
MOVEM U1,SIGDAT+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,SIGDAT+3
LOOKUP 7,SIGDAT
JRST DSKERR
INPUT 7,SIGT3
RELEAS 7,
MOVEI U1,[ASCIZ /DFILLED FROM LEARN.ING/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
POPJ PDP,
DSKERR: MOVEI U1,[ASCIZ /TRY AGAIN/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
POPJ PDP,
DATA: SIXBIT /LEARN/
SIXBIT /ING/
055000000000
SIXBIT / 3ALS/
RDATA: SIXBIT /LEARN/
SIXBIT /DAT/
055000000000
SIXBIT / 3ALS/
MTAOUT: IOWD SIGSIZ*4,LABELD
Z
SIGDAT: SIXBIT /SIGT0/
SIXBIT /DAT/
055000000000
SIXBIT / 3ALS/
SIGT0: IOWD SIGSIZ,LABEL
Z
SIGT1: IOWD SIGSIZ,LABEL+SIGSIZ
Z
SIGT2: IOWD SIGSIZ,LABEL+SIGSIZ*2
Z
SIGT3: IOWD SIGSIZ,LABEL+SIGSIZ*3
Z
SUBTTL DATA FOR EVALUATION
CFZ1: Z ;TEMPORARY STORAGE
CFZ2: Z
CFZ3: Z
CFZ4: Z
CFZ5: Z
CFZ10: Z ;BACKUP LOCATION FOR PASK
CFZ11: Z ;BACKUP LOCATION FOR ACTK
CEMPTY: Z ;TEMPORARY LOCATION FOR EMPTY, ET.AL.
LABEL: BLOCK 5
EVAL11: BLOCK 26 ;SIGNATURE TABLES
SIGT11: BLOCK 27 ;LABEL IS CENTERED IN TABLE TO ALLOW NEGATIVE SUBSCRIPTS
EVAL12: BLOCK 26
SIGT12: BLOCK 27
EVAL13: BLOCK 26
SIGT13: BLOCK 27
EVAL14: BLOCK 26
SIGT14: BLOCK 27
EVAL15: BLOCK 26
SIGT15: BLOCK 27
EVAL16: BLOCK 26
SIGT16: BLOCK 27
EVAL21: BLOCK 76
SIGT21: BLOCK 77
EVAL22: BLOCK 76
SIGT22: BLOCK 77
EVALF: BLOCK 160
SIGTF: BLOCK 161
BLOCK SIGSIZ*3 ;SPACE FOR OTHER PHASES
LABELD: BLOCK 5 ;TO BALANCE LABEL
LRN11: BLOCK 26 ;LEARNING TABLES
SIGL11: BLOCK 27
LRN12: BLOCK 26
SIGL12: BLOCK 27
LRN13: BLOCK 26
SIGL13: BLOCK 27
LRN14: BLOCK 26
SIGL14: BLOCK 27
LRN15: BLOCK 26
SIGL15: BLOCK 27
LRN16: BLOCK 26
SIGL16: BLOCK 27
LRN21: BLOCK 76
SIGL21: BLOCK 77
LRN22: BLOCK 76
SIGL22: BLOCK 77
LRNF: BLOCK 160
SIGLF: BLOCK 161
BLOCK SIGSIZ*3 ;SPACE FOR OTHER PHASES
LABEL1=LABEL+SIGSIZ
LABEL2=LABEL+SIGSIZ*2
LABEL3=LABEL+SIGSIZ*3
LABLD1=LABELD+SIGSIZ
LABLD2=LABELD+SIGSIZ*2
LABLD3=LABELD+SIGSIZ*3
BLOWUP==10 ;RELATIVE SIZE OF INPSIZ IN L AND P
INPSIZ==↑D1020*BLOWUP ;INPSIZ=↑D1020 IN CKP
BOKSIZ=↑D512 ;2**N FOR CONVENIENCE
SAVMOV: AOS X3,BINDEX
MOVE A,PLA
MOVE P,PLP
MOVE K,PLK
PUSHJ PDP,FINDFI ;GET FILE DESIGNATION
HRLZS U2
HRR U2,X3
MOVEM U2,BOOKI(X3)
SKIPE COLOR ;COLOR HAS ALREADY BEEN REVERSED
JRST SAV0
PUSHJ PDP,REVERA
MOVEM Z,BOOKA(X3)
PUSHJ PDP,REVERP
MOVEM Z,BOOKP(X3)
PUSHJ PDP,REVERK
MOVEM Z,BOOKK(X3)
JRST .+4
SAV0: MOVEM A,BOOKA(X3)
MOVEM P,BOOKP(X3)
MOVEM K,BOOKK(X3)
MOVE Z,X4MOVE
MOVEM Z,BOOKM(X3)
CAIGE X3,BOKSIZ-1
POPJ PDP,
MOVEM X2,X2MS# ;SAVE VALUES
MOVEM X4,X4MS#
PUSHJ PDP,MERGE
MOVE X2,X2MS ;RESTORE FORMER VALUES
MOVE X4,X4MS
POPJ PDP,
MERGE: MOVMS PLACE
SETOM BINDEX
MOVEI Z,1
MOVEI X3,BOKSIZ
MER0: SUB X3,Z
SKIPL PLACE
JRST .+3
CAIG X3,BOKSIZ
JRST MER8
JUMPLE X3,MER8
MOVE U1,BOOKI(X3)
CAMG U1,BOOKI-1(X3)
JRST MER6
MER1: MOVE X1,X3
SUB X1,Z
MOVEM X3,STOP1#
MOVEM X3,STOP2#
ADDM Z,STOP2
MOVE U4,X1
ADD U4,PLACE
MER2: CAMG U1,BOOKI(X1)
AOSA X1
AOSA X3
MOVE U1,BOOKI-1(X1)
MOVEM U1,BOOKI(U4)
MOVE U1,BOOKI(X3)
CAML X1,STOP1
AOJA U4,MER4
CAMGE X3,STOP2
AOJA U4,MER2
MER3: ADDI U4,1
MOVE U1,BOOKI(X1)
MOVEM U1,BOOKI(U4)
ADDI X1,1
CAML X1,STOP1
JRST MER5
AOJA U4,MER3+1
MER4: MOVE U1,BOOKI(X3)
MOVEM U1,BOOKI(U4)
ADDI X3,1
CAMGE X3,STOP2
AOJA U4,MER4
MER5: MOVE X3,STOP1
SUB X3,Z
JRST MER0
MER6: MOVEI U2,BOOKI(X3)
SUB U2,Z
HRLS U2
ADD U2,PLACE
HRRM U2,MER7
ADDM Z,MER7
ADDM Z,MER7
SOS MER7
MER7: BLT U2,
SUB X3,Z
JRST MER0
MER8: LSH Z,1
CAIL Z,BOKSIZ
JRST INSERT
MOVEI X3,BOKSIZ
SKIPL PLACE
ADD X3,PLACE
MOVNS PLACE
JRST MER0
PLACE: BOKSIZ
BINDEX: -1 ;SAVMOV COUNT
INSERT: MOVEI X4,BOKSIZ-1
INS2: JUMPL X4,INS6 ;END OF INSERT
HLRZ U1,BOOKI(X4) ;GET FILE DESCRIPTOR
SKIPL PLACE ;IS THIS THE RIGHT ONE?
HLRZ U1,BOOKI+BOKSIZ(X4);GET FILE DESCRIPTOR
CAMN U1,FILEIN ;CORRECT FILE ALREADY IN CORE?
JRST INS1A ;YES
MOVEM U1,FILEI2 ;SAVE NEW VALUE
SKIPE FILCHG# ;HAS FILE BEEN CHANGED
PUSHJ PDP,DMPFIL ;YES, SO DUMP CURRENT FILE
PUSHJ PDP,GETFIL ;AND GET NEW FILE
INS1A: HRRZ X3,BOOKI(X4) ;GET INDEX
SKIPL PLACE ;BUT GET THE RIGHT ONE!
HRRZ X3,BOOKI+BOKSIZ(X4) ;INDICES UNORDERED SINCE LABEL SORT
SKIPN U2,BOOKA(X3)
JRST INSZZ
MOVE U3,BOOKP(X3)
MOVE U4,BOOKK(X3)
PUSHJ PDP,FINDX1 ;FIND LINE LOCATION
JRST INS4B ;NOT FOUND
JUMPN U4,INSX+1 ;ONLY FIRST K MOVE SAVED
INS3A: MOVE Z,INPA(X1)
AND Z,[400400400400]
MOVE X2,BOOKM(X3)
PUSHJ PDP,INBITS
JUMPN Z,INS3B ;NORMAL CASE
IORM X2,INPA(X1) ;INSERT MOVE
MOVEM X1,X1S
MOVEI U1,[ASCIZ /REPLACING 0-0 BOARD AT X3=/]
PUSHJ PDP,PRINT
MOVE U1,X3
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
MOVE X1,X1S
JUMPE U4,INSX ;NON KING CASE
HLRZ X2,BOOKM(X3)
LSH X2,-4
PUSHJ PDP,INBITS
IORM X2,INPP(X1)
HLRZ X2,BOOKM(X3)
ANDI X2,17
PUSHJ PDP,INBITS
IORM X2,INPK(X1)
JRST INSX
INS3B: CAMN Z,X2
JRST INSX+1 ;ITS A DUPLICATE
MOVE Z,INPP(X1)
AND Z,[400400400400]
JUMPN Z,INSX+1 ;ONLY TWO MOVES SAVED
IORM X2,INPP(X1)
JRST INSX ;CORRECTION FINISHED
INS4B: CAIL X1,INPSIZ
JRST INSZ ;WOOPS FILE MUST BE FULL
MOVEI U4,INPSIZ-1
MOVE Z,BOOKK(X3)
MOVE X2,BOOKM(X3) ;TO INSERT MOVE INFO
PUSHJ PDP,INBITS
IORM X2,BOOKA(X3)
JUMPE Z,INS4E
HLRZ X2,BOOKM(X3) ;NOW WINLOS INFO
JUMPE X2,INS4C ;DRAW CASE
LSH X2,-4 ;GET LEFT HALF
PUSHJ PDP,INBITS
IORM X2,BOOKP(X3)
HLRZ X2,BOOKM(X3) ;NOW RIGHT HALF
ANDI X2,17 ;ZERO OUT LEFT 4 BITS
PUSHJ PDP,INBITS
IORM X2,BOOKK(X3)
INS4C: SKIPN INPA(X1) ;IS DESIGNATED LINE EMPTY
JRST INS5 ;YES
MOVEI U4,INPSIZ-3
SKIPE INPA(U4) ;IS FILE FULL
JRST INSZ ;YES
SUBI U4,3
SKIPN U3,INPA(U4)
JRST .-2
INS4D: CAMGE U4,X1
JRST INS5
MOVE U3,INPA(U4)
MOVEM U3,INPA+3(U4)
MOVE U3,INPP(U4)
MOVEM U3,INPP+3(U4)
MOVE U3,INPK(U4)
MOVEM U3,INPK+3(U4)
SUBI U4,3
JRST INS4D
INS4E: SKIPN INPA(X1)
JRST INS5
MOVEI U4,INPSIZ-2
SKIPE INPA(U4)
JRST INSZ
SUBI U4,2
SKIPN INPA(U4)
JRST .-2
INS4F: CAMGE U4,X1
JRST INS5
MOVE U3,INPA(U4)
MOVEM U3,INPA+2(U4)
MOVE U3,INPP(U4)
MOVEM U3,INPP+2(U4)
SUBI U4,2
JRST INS4F
INS5: MOVE U2,BOOKA(X3)
MOVEM U2,INPA(X1)
MOVE U2,BOOKP(X3)
MOVEM U2,INPP(X1)
JUMPE Z,.+3
MOVE U2,BOOKK(X3)
MOVEM U2,INPK(X1)
INSX: AOS FILCHG ;FILE CHANGE COUNT
SOJGE X4,INS2
INS6: SKIPE FILCHG ;HAS FILE BEEN CHANGED
PUSHJ PDP,DMPFIL ;YES SO DUMP
SETZM FILEIN ;FORCE NEW FILE IN
MOVEI U1,[ASCIZ /BSAVED./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST INSZZ
INSZ: MOVEI U1,[ASCIZ /UNABLE TO ADD TO FILE /]
PUSHJ PDP,PRINT
MOVE U1,FILEIN
PUSHJ PDP,OCTOUT
PUSHJ PDP,TERPRI
JRST INSX+1 ;NO CHANGE TO REPORT
INSZZ: INIT 12,17
SIXBIT /DSK/
Z
HALT
MOVE U2,[SIXBIT /CHK/]
MOVEM U2,WHERIN+1
MOVE U2,[055000000000]
MOVEM U2,WHERIN+2
MOVE U2,[SIXBIT / 3ALS/]
MOVEM U2,WHERIN+3
ENTER 12,WHERIN
HALT
OUTPUT 12,WHRINS
RELEAS 12,
POPJ PDP,
WHERIN: SIXBIT /DIRECT/
SIXBIT /CHK/
055000000000
SIXBIT / 3ALS/
WHERES=1133 ;MUST BE SAME AS IN CKB
WHRINS: IOWD WHERES,WHERE
Z
GETFIL: MOVEI U2,INPSIZ-1
SETZM INPA(U2)
SOJGE U2,.-1
MOVE U2,BKMIN2
MOVEM U2,BKMIN
MOVE U1,FILEI2 ;U1 MAY HAVE BEEN CHANGED
MOVEM U1,FILEIN ;NOW ACKNOWLEDGE NEW FILE
LDB U2,[POINT 5,U1,29]
LDB U3,[POINT 5,U1,35]
MOVE U2,CRIP(U2)
LSH U2,14 ;MAKE ROOM FOR REST
IOR U2,CRIP(U3)
TRNN U1,10000 ;TEST K BIT
IOR U2,[SIXBIT /MA/]
TRNE U1,10000 ;TEST AGAIN
IOR U2,[SIXBIT /KA/] ;KING BOARDS
MOVEM U2,DSKBKD ;SAVE FOR DMPFIL
SETZM FILCHG ;START OVER
INIT 12,17
SIXBIT /DSK/
Z
HALT
GETFIA: MOVEM U2,DSKBKM
MOVE U2,[SIXBIT /CHK/]
MOVEM U2,DSKBKM+1
MOVE U2,[055000000000]
MOVEM U2,DSKBKM+2
MOVE U2,[SIXBIT / 3ALS/]
MOVEM U2,DSKBKM+3
LOOKUP 12,DSKBKM
JRST GETFIR
INPUT 12,BKMIN
HRRZ U2,BKMIN
ADDI U2,INPSIZ/BLOWUP
HRRM U2,BKMIN
SKIPE (U2) ;IS FILE PARTIALLY EMPTY
CAIL U2,INPA+INPSIZ-1 ;IS LAST FILE IN
JRST GETFIR ;YES
MOVE U2,DSKBKM
ADD U2,[000100000000]
JRST GETFIA
GETFIR: RELEAS 12,
POPJ PDP,
ZEROIT: HRRZ U1,BKMIN2
SETZM 1(U1) ;ZERO REST OF TABLE
CAMGE U1,INPA+INPSIZ-2
AOJA U1,.-2
POPJ PDP,
DMPFIL: INIT 12,17
SIXBIT /DSK/
Z
HALT
MOVE U1,FILEIN ;RESTORE VALUE
MOVE U2,BKMIN2
MOVEM U2,BKMIN ;START AT FRONT
MOVE U2,DSKBKD ;STARTING FILE
SETZ X5, ;TO INDEX WHERE
MOVEI U5,BLOWUP ;TO COUNT
DMPFI1: SKIPN U3,WHERE(X5)
JRST DMPFI2-1 ;PUT DATA HERE
CAMN U1,U3
JRST DMPFI2 ;FOUND
ADDI X5,BLOWUP+1
CAIGE X5,WHERES
JRST DMPFI1 ;TRY AGAIN
MOVEI U1,[ASCIZ /WHERE TABLE IS FULL/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST DMPFI3 ;TROUBLE TROUBLE
MOVEM U1,WHERE(X5)
DMPFI2: MOVEM U2,DSKBKM
MOVE U2,[SIXBIT /CHK/]
MOVEM U2,DSKBKM+1
MOVE U2,[055000000000]
MOVEM U2,DSKBKM+2
MOVE U2,[SIXBIT / 3ALS/]
MOVEM U2,DSKBKM+3
ENTER 12,DSKBKM
HALT
OUTPUT 12,BKMIN
HRRZ U2,BKMIN
ADDI U2,INPSIZ/BLOWUP
HRRM U2,BKMIN
MOVE Z,-1(U2)
SKIPE BOOKK(X3)
MOVE Z,-2(U2)
AND Z,[377377377377] ;REMOVE MOVE BITS
MOVEM Z,WHERE+1(X5)
ADDI X5,1
JUMPE Z,DMPFI3
MOVE U2,DSKBKM
ADD U2,[000100000000]
SOJG U5,DMPFI2
DMPFI3: RELEAS 12,
SETZM FILCHG
POPJ PDP,
DSKBKD: Z ;TEMPORARY SAVE OF DSKBKM FOR DMPFIL
DSKBKM: Z
SIXBIT /CHK/
055000000000
SIXBIT / 3ALS/
Z
BKMIN: IOWD INPSIZ/BLOWUP,INPA
Z
BKMIN2: IOWD INPSIZ/BLOWUP,INPA
Z
Z
INPA: BLOCK INPSIZ
INPP=INPA+1
INPK=INPA+2
Z
BOOKA: BLOCK BOKSIZ+20
BOOKP: BLOCK BOKSIZ+20
BOOKK: BLOCK BOKSIZ+20
BOOKM: BLOCK BOKSIZ+20
BOOKI: BLOCK BOKSIZ*2+40
FILEIN: Z ;FILE ACTUALLY IN MEMORY
FILEI2: Z ;TEMPORARY STORE OF FILEIN
INBITS: LSHC X2,-3
LSH X2,10
LSHC X2,1
LSH X2,10
LSHC X2,1
LSH X2,10
LSHC X2,1
LSH X2,10
POPJ PDP,
BOLAND: PUSHJ PDP,MAGIN
HALT
MOVE X1,U1
SKIPE TRUNKF ;DO WE PRINT
PUSHJ PDP,TYO
CAIN U1,11 ;LOOK FOR A TAB
JRST .+3 ;ONE FOUND
CAIE U1,15 ;LOOK FOR C.R.
JRST .-10 ;NOT TIME TO STOP
SKIPE TRUNKF ;NOW END COMMENT
PUSHJ PDP,TERPRI
BOL1: PUSHJ PDP,MAGIN
HALT
CAIN U1,11 ;IGNORE SECOND TAB
JRST .-3
MOVEM U1,BORW# ;BLACK OR WHITE TO PLAY
SETZ U2,
CAIN U1,"D"
JRST BOL3
BOL2: PUSHJ PDP,MAGIN
HALT
CAIGE U1,72
CAIGE U1,60
JRST BOL3
IMULI U2,12
ADD U2,U1
SUBI U2,60
SETZ U1,
JRST BOL2
BOL3: MOVEM U2,WINLOS
PUSHJ PDP,NEWLIN
HALT
JUMPE U2,BOL4
CAME U1,BORW
JRST .+4
TRNN U2,1
AOS WINLOS
JRST .+3
TRNE U2,1
AOS WINLOS
BOL4: MOVEI Z,1
CAIN U1,"W"
MOVEM Z,COLOR
CAIN U1,"B"
SETZM COLOR
PUSHJ PDP,BDIN ;SET UP BOARD
MOVE A,U3
PUSHJ PDP,NEWLIN
HALT
PUSHJ PDP,BDIN0
MOVE P,U3
MOVE K,U5
MOVEM A,TA
MOVEM P,TP
MOVEM K,TK
MOVEI U1,"TK"
MOVEM U1,LPOINT
SETZ X2,
SETOM X4VAR
JRST BEGIN2
X4VAR: -1 ;COUNT OF VARIATION BOARDS
BDIN: SETZ U5,
BDIN0: SETZ U3,
BDIN1: HRLZI U4,400000
SETZ U2,
BDIN2: PUSHJ PDP,MAGIN
HALT
CAIGE U1,72
CAIGE U1,60
JRST BDIN3
IMULI U2,12
ADD U2,U1
SUBI U2,60
SETZ U1,
JRST BDIN2
BDIN3: EXCH U1,U2
JUMPE U1,BDIN4
PUSHJ PDP,OUTIN
MOVNS U1
ROT U4,(U1)
TDO U3,U4
CAIE U2,"K"
JRST .+3
TDO U5,U4
JRST BDIN1
BDIN4: CAIN U2,","
JRST BDIN1
POPJ PDP,
FIXX: TTYUUO 11,0
SETZM LASCAR
SETZM FLAG#
SETZM FIXINS#
MOVEI U1,1
SETZM COLOR
CAME U1,SI
AOS COLOR
SETZB X3,X4
MOVEM A,PLA
MOVEM P,PLP
MOVEM K,PLK
SETZM OJ
PUSHJ PDP,LEGAL
JRST FIX1 ;NO LEGAL MOVES
AOS OJ ;SET JUMP FLAG
PUSHJ PDP,X4NORM
MOVEI U1,[ASCIZ /LEGAL MOVES ARE:/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,LEGM ;REPORT LEGAL MOVES
SETOM BINDEX
MOVEI Z,1
XORM Z,COLOR ;COLOR IS REVERSED IN SAVMOV
PUSHJ PDP,SAVMOV
MOVEI Z,1
XORM Z,COLOR
HLRZ U1,BOOKI
MOVEM U1,FILEI2
CAME U1,FILEIN
PUSHJ PDP,GETFIL
MOVE U2,BOOKA
MOVE U3,BOOKP
MOVE U4,BOOKK
PUSHJ PDP,FINDX1
JRST NOFIND
MOVEM X1,X1S
MOVEI U1,[ASCIZ /LISTED MOVES ARE /]
PUSHJ PDP,PRINT
MOVE X1,X1S
MOVE X5,INPA(X1)
PUSHJ PDP,EXBITS
PUSHJ PDP,RPMOVE
MOVE X5,INPP(X1)
PUSHJ PDP,EXBITS
SKIPE BOOKK ;A KING BOARD
JRST FIXK ;YES
JUMPE X5,FIX6
MOVEI U1,[ASCIZ /,/]
PUSHJ PDP,PRINT
PUSHJ PDP,RPMOVE
JRST FIX6
NOFIND: MOVEM X1,X1S
MOVEI U1,[ASCIZ /BOARD NOT FOUND, CR OR TYPE MOVE :/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
TTYUUO 11,0
SETZM LASCAR
PUSHJ PDP,SCAN
CAIN U1,12 ;A LINE FEED
JRST .-2 ;YES
CAIN U1,15 ;A CR
JRST FIXOK
SETOM FIXINS ;SO NEW BOARD WILL BE INSERTED
SETZM BOOKM
SETZM BOOKM+1
JRST FIX8 ;NOW GET MOVE
FIXK: MOVE Z,X5
MOVE X5,INPK(X1)
PUSHJ PDP,EXBITS
LSH Z,4
IORB X5,Z
JUMPE X5,FIXK2
MOVEI U1,[ASCIZ /, WIN-LOSS DISTANCE IS /]
PUSHJ PDP,PRINT
MOVE U1,X5
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
JRST FIX6
FIXK2: MOVEI U1,[ASCIZ /, REPORTED AS A DRAW./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST FIX6
RPMOVE: MOVEM X5,X4
JUMPN X5,.+4
MOVEI U1,[ASCIZ /0-0/]
PUSHJ PDP,PRINT
POPJ PDP,
SKIPN COLOR
JRST .+7
MOVEI U1,1
CAMN X4,X4TAB(U1)
JRST .+3
CAIGE U1,17
AOJA U1,.-3
MOVE X4,U1
SUBI X4,1 ;COUNT FROM ZERO
MOVE U3,MOVES(X4)
JUMPN U3,.+4
MOVEI U1,[ASCIZ /ILLEGAL/]
PUSHJ PDP,PRINT
POPJ PDP,
HLRZ U1,U3
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ /-/]
PUSHJ PDP,PRINT
HRRZ U1,U3
PUSHJ PDP,NUMOUT
POPJ PDP,
FIX1: MOVEI U1,[ASCIZ /NO LEGAL MOVES FOUND./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
POPJ PDP,
FIX6: TTYUUO 11,0
SETZM LASCAR
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /CR IF OK, OR ENTER MOVES WANTED/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
FIX7: PUSHJ PDP,SCAN
CAIN U1,12 ;A LINE FEED
JRST FIX7 ;YES
CAIN U1,15 ;A CR
JRST FIXOK
SETZM BOOKM
SETZM BOOKM+1
FIX8: HRLZ U2,U1 ;START IN LEFT HALF
PUSHJ PDP,SCAN
TLNE U1,-1
JRST .+3
PUSHJ PDP,EOL
JRST ERR
HRR U2,U1 ;TERMINATION IN RIGHT HALF
JUMPE U2,NULL ;TO STORE NO-MOVE BOARD FOR TEST
MOVEI X4,20
CAMN U2,MOVES(X4)
JRST .+6
SOJGE X4,.-2
MOVEI U1,[ASCIZ /ILLEGAL MOVE. /]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST FIX6
ADDI X4,1 ;TO COUNT FROM 1
SKIPE COLOR
MOVE X4,X4TAB(X4)
MOVEM X4,BOOKM
SKIPE BOOKK
JRST FIX9K
PUSHJ PDP,SCAN
CAIN U1,15
JRST FIX11
TLNE U1,-1
JRST .+3
PUSHJ PDP,EOL
JRST ERR
HRRZS U1
HRLZ U2,U1
PUSHJ PDP,SCAN
TLNE U1,-1
JRST .+3
PUSHJ PDP,EOL
JRST ERR
HRR U2,U1
MOVEI X4,20
CAMN U2,MOVES(X4)
JRST .+6
SOJGE X4,.-2
MOVEI U1,[ASCIZ /ILLEGAL SECOND MOVE, FIRST MOVE ONLY WILL BE USED. /]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST FIX11
ADDI X4,1 ;TO COUNT FROM 1
SKIPE COLOR
MOVE X4,X4TAB(X4)
MOVEM X4,BOOKM+1
FIX11: MOVE X1,X1S
SKIPE FIXINS ;IS BOARD IN TABLE
JRST INS4B ;NO SO INSERT
MOVE X1,X1S ;WE NEED THIS
FIX10: HRRZ X2,BOOKM
PUSHJ PDP,INBITS
MOVE U1,INPA(X1)
AND U1,[377377377377]
IOR U1,X2
MOVEM U1,INPA(X1)
SKIPE BOOKK
JRST FIX12
FIX13: MOVE X2,BOOKM+1
PUSHJ PDP,INBITS
MOVE U1,INPP(X1)
AND U1,[377377377377]
IOR U1,X2
MOVEM U1,INPP(X1)
JRST FIXZ
FIX12: HLRZ X2,BOOKM
LSH X2,-4
PUSHJ PDP,INBITS
MOVE U1,INPP(X1)
AND U1,[377377377377]
IOR U1,X2
MOVEM U1,INPP(X1)
HLRZ X2,BOOKM
ANDI X2,17
PUSHJ PDP,INBITS
MOVE U1,INPK(X1)
AND U1,[377377377377]
IOR U1,X2
MOVEM U1,INPK(X1)
JRST FIXZ
FIXOK: MOVEI U1,[ASCIZ /NO CHANGE MADE./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST .+2
FIXZ: PUSHJ PDP,DMPFIL
PUSHJ PDP,TERPRI
SETOM BINDEX ;TO OVERWRITE TRASH
POPJ PDP,
ACCEPT: PUSHJ PDP,TERPRI
SETZM U5
TTYUUO 11,0
SETZM LASCAR
MOVEI U1,[ASCIZ /BLACK PIECES ON: /]
PUSHJ PDP,PRINT
PUSHJ PDP,ACC ;READ IN BLACK PIECES
MOVEM U3,OA ;STORE BLACK PIECES
MOVEI U1,[ASCIZ /WHITE PIECES ON: /]
PUSHJ PDP,PRINT
PUSHJ PDP,ACC ;NOW READ IN WHITE PIECES
MOVEI U1,[ASCIZ /BLACK TO PLAY? /]
PUSHJ PDP,PRINT
MOVEI U1,1
MOVEM U1,SI
PUSHJ PDP,NOYES
AOSA SI
JRST .+3 ;BLACK IS TO PLAY
EXCH U3,OA
SETZM SIDE
MOVEM U3,OP ;STORE WHITE PIECES
MOVEM U5,OK
MOVE A,OA
MOVEM A,PLA
MOVE P,OP
MOVEM P,PLP
MOVE K,OK
MOVEM K,PLK
PUSHJ PDP,TERPRI
JRST FIXX
ACC: SETZM U3
ACC1: HRLZI U4,400000
ACC2: PUSHJ PDP,SCAN
CAIN U1,15 ;CR?
POPJ PDP, ;YES
TLZE U1,400000 ;NUMBER?
JRST ACC3 ;YES
HRRZS U1 ;GET RID OF LEFT HALF FLAG BITS
CAIN U1,K ;IF A KING ...
TDO U5,U4 ; ... SET KING BIT
JRST ACC1
ACC3: PUSHJ PDP,OUTIN ;CONVERT TO INTERNAL NUMBERS
MOVNS U1
ROT U4,(U1) ;ROTATE TO BIT'S POSITION
TDO U3,U4 ;SET PIECE'S BIT
JRST ACC2
LEGM: SETZM FLAG
MOVEI X4,17
SETZM MOVES(X4) ;CLEAR SPACE
SOJGE X4,.-1
SETZ X4,
MOVEI U3,4
SKIPE U2,PLRF
PUSHJ PDP,LEGM1
MOVEI U3,5
SKIPE U2,PLLF
PUSHJ PDP,LEGM1
MOVNI U3,4
SKIPE U2,PLLB
PUSHJ PDP,LEGM1
MOVNI U3,5
SKIPE U2,PLRB
PUSHJ PDP,LEGM1
PUSHJ PDP,TERPRI
POPJ PDP,
LEGM1: MOVEI U4,↑D35
TRNE U2,1
JRST .+4
LSH U2,-1
SOJG U4,.-3
POPJ PDP,
MOVEI U1,[ASCIZ /,/]
SKIPE FLAG
PUSHJ PDP,PRINT
MOVE U1,U4
PUSHJ PDP,INOUT
HRLZM U5,MOVES(X4)
MOVEI U1,[ASCIZ /-/]
PUSHJ PDP,PRINT
MOVE U1,U4
ADD U1,U3
SKIPE OJ
ADD U1,U3
PUSHJ PDP,INOUT
HRRM U5,MOVES(X4)
AOS FLAG
AOS X4
JRST LEGM1+3
INOUT: CAIL U1,↑D27
SOS U1
CAIL U1,↑D18
SOS U1
CAIL U1,↑D9
SOS U1
MOVEM U1,U5
PUSHJ PDP,NUMOUT
POPJ PDP,
EXBITS: LSHC X5,-11 ;EXTRACT GUARD BITS
LSH X5,-10
LSHC X5,-1
LSH X5,-10
LSHC X5,-1
LSH X5,-10
LSHC X5,3
POPJ PDP,
FIXIN: MOVE X1,X1S
PUSHJ PDP,INS4C ;MUST INSERT LINE
SKIPE BOOKM+1 ;IS THERE ANOTHER MOVE
JRST FIX13
PUSHJ PDP,DMPFIL
PUSHJ PDP,TERPRI
POPJ PDP,
FIX9K: MOVEI U1,[ASCIZ /[CR FOR DRAW OR TYPE WIN-LOSS DISTANCE /]
PUSHJ PDP,PRINT
TTYUUO 11,0
SETZM LASCAR
PUSHJ PDP,SCAN
CAIN U1,12
JRST .-2
CAIE U1,15
HRLM U1,BOOKM
JRST FIX11
NULL: MOVEI U1,[ASCIZ /0-0 STORES A NO-MOVE BOARD. DO YOU WANT THIS. Y OR N: /]
PUSHJ PDP,PRINT
PUSHJ PDP,NOYES
JRST FIX6 ;TRY AGAIN
JRST FIX11 ;STORE NO-MOVE BOARD
OA: Z
OP: Z
OK: Z
MOVES: BLOCK 20 ;SPACE FOR LEGAL MOVES
END